【发布时间】:2018-07-10 21:48:40
【问题描述】:
我们目前正在从 Joda-Time 迁移到 java.time。我对fromDateFields()方法有以下疑问。旧约达代码:
Date date = new Date(); //some java Date
LocalDateTime lt = LocalDateTime.fromDateFields(date);
一位同事将其迁移到以下几行(java.time 代码):
lt = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
正确吗? Joda-Time docs描述方法fromeDateFields是这样的:
从 java.util.Date 构造一个 LocalDateTime,完全使用 相同的字段值。
每个字段都从 Date 中查询并分配给 LocalDateTime。 如果您一直使用 Date 作为本地日期,这很有用, 忽略区域。
达到相同结果的正确方法是什么?
更新(刚刚找到以下解决方案):
lt= LocalDateTime.from(date.toInstant());
【问题讨论】:
-
我会说您同事的代码是正确的,但是如果您想确保获得完全相同的结果,请实施相同的方法。见 Joda-Time 来源:github.com/JodaOrg/joda-time/blob/master/src/main/java/org/joda/….
-
看起来正确。请记住,joda 文档还说:“传输本地字段值,使用 JDK 时区数据计算”
-
没想到看Joda-time源代码。好提示!还刚刚找到以下看起来更好的解决方案?
LocalDateTime.from(date.toInstant());个人不喜欢上面代码中的zone部分...
标签: java jodatime java-time localdate java.time.instant