1

中央ヨーロッパでは、現在のタイムゾーン(10月3日現在)は次のとおりです。

CEST / UTC + 2

しかしSimpleDateFormat、Androidでインスタンスを作成すると...

dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

...CET / UTC+1タイムゾーンとして返されます。したがって、現時点でまだ存在している必要があるDSTオフセットを無視しています。どうしてこれなの?

さらに、インスタンスの(現在は非推奨の)メソッドgetTimezoneOffset()を使用するDateと、一貫性のない結果が返されます。

(new Date()).getTimezoneOffset()正しく-120(2時間)をdateTimeFormat.parse("2012-10-03T22:00:00.000+0000").getTimezoneOffset()返し、-60(1時間)を返します。

これはどのように起こりますか?私は何か間違ったことをしていますか、それともこれは既知のバグですか?

注:より良い時間計算を提供するライブラリ(Joda Timeなど)があると聞きましたが、今ではかなり頻繁に聞いています;)しかし、いくつかの回避策を使用すると、組み込みのJava時間ライブラリを同じように簡単に使用できます。

そしてもちろん、私のマシンではタイムゾーンが正しく設定されています。

4

2 に答える 2

1

あなたのユースケースを適切に理解しているかどうかはわかりませんが、このコードを試してみて理解できたことから。

public static void main(String[] args) {
        SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        String date="2012-10-03T22:00:00.000+0000";
        try {
            System.out.println(dateTimeFormat.getTimeZone().getDisplayName());
            System.out.println("Today : "+new Date().toString()+ ", Timezone Offset :" +
                    +(new Date()).getTimezoneOffset());
            System.out.println("Parsed Date : "+
                    dateTimeFormat.parse(date).toString()
                    + ", Timezone Offset : "
                    +dateTimeFormat.parse(date).getTimezoneOffset());           
        } catch (ParseException e) {            
            e.printStackTrace();
        }
    }

私は一貫した出力を取得しています。

Central European Time
Today : Wed Oct 03 09:44:56 CEST 2012, Timezone Offset : -120
Parsed Date : Wed Oct 03 23:00:00 CEST 2012, Timezone Offset : -120
于 2012-10-12T08:31:33.173 に答える