java - 如何从 java.sql.Time 创建一个 joda 持续时间?

标签 java time jodatime sql-types

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

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 类型)

最佳答案

我想您的 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.Time 转换为 LocalTime ( and vice versa ) 轻松补偿:

LocalTime lt = new LocalTime(time);

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

Duration d = new Duration(lt.getMillisOfDay());

关于java - 如何从 java.sql.Time 创建一个 joda 持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122529/

相关文章:

time - 推荐个人使用的基于 Web 的时间/任务管理解决方案?

scala - unsupportedOperationException 使用 Joda 时间将字符串转换为 DateTime 时出错

java - 理解 joda 时间 PeriodFormatter

java - 日期/时间计算何时涉及时区?

jquery - 使用 jQuery 从日期/时间字符串中删除时间

java - GWT Gilead(JPA 配置)

java - 如何修复 java 版本编码 "java_home: option requires an argument -- v"中的错误?

java - 显示正确对应的 SQLite 数据库 Android/Java 的数据

time - 可空时间.Time

java - 当使用主机 :port 调用时,jprofiler jpcontroller 无法连接到 jvm