0

誰かがこの質問に反対する前に、私は自分が直面している状況についてWebとStackOverflowを閲覧しましたが、何も見つかりませんでした。そのため、新しい質問として投稿しています。

Javaの日付とタイムゾーンに問題があります。

状況:

2つの異なるタイムゾーンに2つのサーバーがあります。たとえば、PSTとCSTです。それらのサーバーからdateString(文字列としての日付)を受け取っています。しかし、SimpleDateFormatを使用して文字列を日付に変換しようとすると、日付情報(年、月、日、時間、分、秒)が正しく変換されています。ただし、タイムゾーン情報は保持されていません。

ESTのサーバーでコードを実行すると、pstDateStringは日付形式に変換されますが、タイムゾーンはPSTではなくEDTに設定されています。

いろいろ考えましたが、ストレスがたまって解決策が見つからないのかもしれません。何か助けはありますか?

状況をシミュレートするコードブロック:

        DateFormat outDF1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
        outDF1.setTimeZone(TimeZone.getTimeZone("PST"));        
        String pstDateString = outDF1.format(new Date());

        DateFormat outDF2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
        outDF2.setTimeZone(TimeZone.getTimeZone("CST"));
        String cstDateString = outDF2.format(new Date());

        System.out.println("pstDateString "+pstDateString);
        System.out.println("cstDateString "+cstDateString);

        Date cstDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS").parse(cstDateString);
        Date pstDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS").parse(pstDateString);

        System.out.println("Date after format from string: "+pstDate);
        System.out.println("Date after format from string: "+cstDate);

現在の出力:

pstDateString 2012-06-07 10:26:689
cstDateString 2012-06-07 12:26:694
Date after format from string: Thu Jun 07 10:26:00 EDT 2012
Date after format from string: Thu Jun 07 12:26:00 EDT 2012

期待される出力:

pstDateString 2012-06-07 10:26:689
cstDateString 2012-06-07 12:26:694
Date after format from string: Thu Jun 07 10:26:00 PST 2012
Date after format from string: Thu Jun 07 12:26:00 CST 2012
4

1 に答える 1

4

java.util.Date クラスにはタイムゾーンがなく、常に UTC です。着信タイムゾーンを保持したい場合は、Date と TimeZone を組み合わせた新しいクラスが必要になります。単純なホルダー クラスを作成するか、Calendar を使用することもできます。

于 2012-06-07T17:34:20.137 に答える