25

新しい Date() オブジェクトを作成した場合。印刷されるデフォルトのタイムゾーンは何ですか。

私は自分のマシンを GMT で実行しています。そして、新しい Date() オブジェクトを作成しています。印刷すると、Thu Jul 05 08:21:05 PKT 2012 と表示されるのはなぜですか。

4

3 に答える 3

29

日付自体にはタイムゾーンがありません。そのtoString()メソッドは、現在のデフォルトのタイム ゾーンを使用して、この日付を表す文字列を返します。

Date date = new Date();

System.out.println(TimeZone.getDefault());
System.out.println(date);

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

System.out.println(TimeZone.getDefault());
System.out.println(date);

私のマシンで上記のコードを実行すると、次の出力が得られます。

sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
Fri Jul 06 09:24:45 CEST 2012
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
Fri Jul 06 07:24:45 UTC 2012
于 2012-07-06T07:33:45.337 に答える
5

実際には、基本的な日時は通常、タイム ゾーンに依存せず、タイム ゾーンを保存しません。タイムゾーンを利用するには、フォーマッターやカレンダーなどを使用します。もちろん、基本日付は、デフォルトのタイム ゾーン (通常は GMT) である必要があります。そうしないと、基本日付インスタンスからローカル日付を作成できません。

特定のケースでは、a) javadocs と b) クラス自体を調べると役立ちます。JDK は通常、java.util.Date のソース コードとともに配布されているためです。javadoc によると、java.util.Date クラスは、「エポック」として知られる標準基準時刻、つまり 1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数を表します。

お使いのマシンで印刷されたときに別の日付が表示される場合は、システムがシステムのデフォルトのタイム ゾーンを使用して印刷するためです。ただし、他のタイムゾーンを使用して自分で印刷することはできます.

于 2012-07-06T07:35:35.773 に答える