1

您好,我有这段代码摘录:

end = new DateTime(mergeToDateTime(this.endDate, this.empEndTime));

Duration extraTime = new Duration(this.preTime.getTime()); //add the first 30 mins
extraTime = extraTime.plus(new Duration(this.postTime.getTime())); //add the second 30 mins
end = end.plus(extraTime); // extraTime = -3600?

当我查看调试器时,我的持续时间总是为负数。我不知道为什么会这样,即使根据API,可以从long类型创建持续时间,因此getTime()。(preTimepostTimejava.sql.Time类型)

4

2 回答 2

3

我猜您的实例的java.sql.Time创建方式是它们的毫秒值包括时区偏移量。

例如,不推荐使用java.sql.Time(int hour, int minute, int second)的构造函数会考虑当前时区的偏移量:

System.out.println(new Time(1, 0, 0).getTime()); // Prints -7200000 in UTC+3 timezone

看起来时区偏移量是由 JDBC 驱动程序引入的,可以通过转换java.sql.TimeLocalTime反之亦然)轻松补偿:

LocalTime lt = new LocalTime(time);

然后您可以转换LocalTime为持续时间:

Duration d = new Duration(lt.getMillisOfDay());
于 2012-04-12T11:45:30.677 回答
2

当您使用瞬间作为持续时间时,您是否开始错了?您使用的构造函数签名是Duration(long duration),而不是Duration(long startInstant)- 实际上没有这样的构造函数。

于 2012-04-12T11:27:50.167 回答