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指示符可以使格式化程序在UTC时间表中解析date1
。我很确定我对Chronology
和DateTimeZone
之间的区别感到困惑,所以如果有人能指出我正在混淆的是什么,我真的很感激。
答案 0 :(得分:3)
解析将在默认时区中创建日期时间,除非进一步配置。考虑“Z”,但会根据需要调整时间以匹配您的时区(布加勒斯特)。
val date1 = formatter.withOffsetParsed().parseDateTime("2012-01-03T00:00:00Z")
添加withOffsetParsed()
以获得您想要的行为。