我遇到了一个奇怪的问题.这是一段描述它的代码:
DateTimeZone dtz = DateTimeZone.forOffsetHours(0);
DateTime dt = new DateTime(dtz);
System.out.println(dt);
System.out.println(dt.toDate());
Run Code Online (Sandbox Code Playgroud)
输出是:
2012-02-29T17:24:39.055Z
Wed Feb 29 19:24:39 EET 2012
Run Code Online (Sandbox Code Playgroud)
我找到UTC + 2,但是这个动作应该创建一个java.util.Date对象,该对象初始化为UTC时间.我错过了什么?
Jon*_*eet 20
Date根本不知道时区 - 它只代表一个时刻(就像Joda Time的Instant类型).自Unix时代以来只有几毫秒.当您调用时Date.toString(),它始终使用系统本地时区将其转换为可读文本格式.
所以没有什么错在这里-只是一个预期失败过任何的意义java.util.Date 或它的toString()行为,或两者兼而有之.
(顺便说一句,更喜欢DateTimeZone.UTC创建自己的.)
小智 9
获得一个Date与Joda的DateTime转换匹配的JDK LocalDateTime.
如其他答案中所述,以毫秒为单位的时间不会因时区而改变:
DateTime local = DateTime.now()
Date localJDK = local.toDate()
assert localJDK.getTime() == local.toInstant().getMillis()
DateTime differentTimeZone = DateTime.now(DateTimeZone.forID('America/Chicago'))
Date localJDK2 = differentTimeZone.toDate()
assert differentTimeZone.toInstant().getMillis() == localJDK2.getTime()
assert localJDK.getTime() == localJDK2.getTime()
Run Code Online (Sandbox Code Playgroud)
转换LocalDateTime为Date将改变:
Date differentTimeZoneJDK = differentTimeZone.toLocalDateTime().toDate()
assert localJDK.getTime() != differentTimeZoneJDK.getTime()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13788 次 |
| 最近记录: |