3

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

インスタンスが同等として扱われるためには同じ年表が必要であることは知っていますが、文字列内のZ指定子によってUTC年表でDateTimeフォーマッターが解析されることを期待していました。とdate1の違いについてはかなり混乱していると思いますので、誰かが私が混乱していることを正確に指摘していただければ幸いです。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 に答える