![](/img/trans.png)
[英]How to convert Joda-Time DateTime to java.util.Date and vice versa?
[英]Joda time's DateTime converted to java.util.Date strange issue
我遇到了一个奇怪的问题。 这是一段描述它的代码:
DateTimeZone dtz = DateTimeZone.forOffsetHours(0);
DateTime dt = new DateTime(dtz);
System.out.println(dt);
System.out.println(dt.toDate());
输出是:
2012-02-29T17:24:39.055Z
Wed Feb 29 19:24:39 EET 2012
我找到UTC + 2,但是这个动作应该创建一个java.util.Date对象,该对象初始化为UTC时间。 我错过了什么?
Date
根本不知道时区 - 它只代表一个时刻(如Joda Time的Instant
类型)。 自Unix时代以来只有几毫秒。 当您调用Date.toString()
,它始终使用系统本地时区将其转换为可读文本格式。
所以没有什么错在这里-只是一个预期失败过的任何意义java.util.Date
或它toString()
行为,或两者兼而有之。
( DateTimeZone.UTC
,更喜欢DateTimeZone.UTC
创建自己的。)
要获得与Joda的DateTime
匹配的JDK Date
,请首先转换为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()
将LocalDateTime
转换为Date
将改变:
Date differentTimeZoneJDK = differentTimeZone.toLocalDateTime().toDate()
assert localJDK.getTime() != differentTimeZoneJDK.getTime()
你想要的行为是这样的:
Date jdkDate = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”)。parse(dt.toString(“yyyy-MM-dd HH:mm:ss”));
像Jon指出的那样,JDK日期与时区无关。 希望这有助于某人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.