为什么第一个Joda DateTime实例获得非UTC年表?

时间:2012-09-28 15:25:24

标签: timezone equals jodatime utc

由于年代表的不同,

date1date2在这里并不相同:

val formatter = ISODateTimeFormat.dateTimeNoMillis
val date1 = formatter.parseDateTime("2012-01-03T00:00:00Z")
val date2 = new DateTime(2012, 1, 3, 0, 0, DateTimeZone.UTC)
println(date1.getChronology) // ISOChronology[Europe/Bucharest]
println(date2.getChronology) // ISOChronology[UTC]
assert(date1 === date2)      // fails

虽然这里他们是平等的:

val formatter = ISODateTimeFormat.dateTimeNoMillis
val date1 = formatter.withZone(DateTimeZone.UTC).parseDateTime("2012-01-03T00:00:00Z")
val date2 = new DateTime(2012, 1, 3, 0, 0, DateTimeZone.UTC)
println(date1.getChronology) // ISOChronology[UTC]
println(date2.getChronology) // ISOChronology[UTC]
assert(date1 === date2)      // succeeds

我知道DateTime个实例应该具有相同的年表,以便被视为相等,但我希望字符串中的Z指示符可以使格式化程序在UTC时间表中解析date1。我很确定我对ChronologyDateTimeZone之间的区别感到困惑,所以如果有人能指出我正在混淆的是什么,我真的很感激。

BTW,代码在Scala中,断言来自ScalaTest,但这不应该有任何区别。

1 个答案:

答案 0 :(得分:3)

解析将在默认时区中创建日期时间,除非进一步配置。考虑“Z”,但会根据需要调整时间以匹配您的时区(布加勒斯特)。

val date1 = formatter.withOffsetParsed().parseDateTime("2012-01-03T00:00:00Z")

添加withOffsetParsed()以获得您想要的行为。