3

date1并且date2由于年表不同而在这里不相等:

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 指示符会使格式化程序date1在 UTC 年表中解析。我很确定我对 和 之间的区别感到困惑ChronologyDateTimeZone所以如果有人能指出我正在混淆的确切内容,我将不胜感激。

顺便说一句,代码在 Scala 中,断言来自 ScalaTest,但这不应该有任何区别。

4

1 回答 1

3

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

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

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

于 2012-09-28T19:40:33.580 回答