誰かがこの質問に反対する前に、私は自分が直面している状況について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