3

私は CEST タイムゾーン (+2) を使用していますが、JodaTime が DateTime を格納する方法を理解するのに苦労しています。次のコードを使用します。

String timeString = "2012-09-10T13:30:00+01:00";
DateTime ddateTime = new DateTime(timeString);
DateTime dtLisbon = ddateTime.withZone(DateTimeZone.forID("Europe/Lisbon"));

実行後、変数は次の値を取得します。

timeString = '2012-09-10T13:30:00+01:00'
ddateTime = '2012-09-10T14:30:00.000+02:00'
dtLisbon = '2012-09-10T13:30:00.000+01:00'

JodaTime が ddateTime を送信している正確な文字列に設定しないのはなぜですか? 適切なインスタントを取得するには、常に .withZone メソッドを呼び出す必要がありますか?

ありがとうございました

4

1 に答える 1

6

次のようなDateTimeコンストラクターを呼び出す必要があります。DateTimeZone

new DateTime(timeString, DateTimeZone.forID("Europe/Lisbon"));

Joda が行っている呼び出しをステップ実行すると、すべての要素がどのように組み合わされているかの感触をつかむことができるので、強くお勧めします。呼び出しチェーンは次のようになります。

DateTime(Object)
  -> BaseDateTime(Object, Chronology)
    -> AbstractConverter.getChronology(Object, Chronology)
      -> DateTimeUtils.getChronology(Chronology)
        -> ISOChronology.getInstance()
          -> DateTimeZone.getDefault()
            -> System.getProperty("user.timezone")

そのため、指定した文字列のタイム ゾーンである UTC+1 の代わりにを指定ddateTimeしないと、タイム ゾーンである UTC+2 になります。DateTimeZone

于 2012-09-10T23:37:42.080 に答える