1

日付と時刻の列と次のようなタイムゾーンを持つ Access データベースがあります。

データ例

まず、TimeZone オブジェクトと SimpleDateFormat オブジェクトを次のように作成します。

TimeZone timeZone = TimeZone.getTimeZone(parseNull(rs.getString("TimeZone")));      
DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormatter.setTimeZone(timeZone);

次に、次のように日付を読み込んでいます。

String startDateString = rs.getDate("Start_Date") + " " + rs.getString("Start_Time").substring(11);
startDate = dateFormatter.parse(startDateString);

ただし、次のように日付を印刷すると:

System.out.println("Start Actual: " + rs.getDate("Start_Date") + " " + rs.getString("Start_Time").substring(11));
System.out.println("Start Formatted: " + startDate);

次の出力が得られます。

Start Actual: 2011-11-10 18:00:00
Start Formatted: Thu Nov 10 02:00:00 EST 2011

わかった....なぜ?これは非常に紛らわしいと思います。Date オブジェクトがオーストラリア/シドニーのタイム ゾーンで正しく表示されないのはなぜですか? アプリケーションで日付を正しく設定できるようにするにはどうすればよいでしょうか?

助けてくれてありがとう!

4

2 に答える 2

3

Ajava.util.Dateにはタイムゾーンがありません。それは普遍的な瞬間です。人間が読める形式で日付を表示する場合、この日付を表示するタイムゾーンを選択し、日付を文字列に変換するために使用される SimpleDateFormat でタイムゾーンを設定します。

だけの場合、日付System.out.println("Start Formatted: " + startDate)toString()方法が使用され、このtoString()方法はデフォルトのタイムゾーンを使用します。

于 2012-05-21T21:24:37.407 に答える
0

JBは正しく、java.util.Dateタイムゾーンがありません。探している出力を取得するには、次のことを試してください。

System.out.println("Start Formatted: " + dateFormatter.format(startDate).toString());

于 2012-05-21T21:34:35.180 に答える