web-dev-qa-db-ja.com

Java.util.Dateのデフォルトのタイムゾーンは何ですか

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

GMTでマシンを実行しています。そして、私は新しいDate()オブジェクトを作成しています。印刷する場合、なぜ木曜日7月05 08:21:05 [〜#〜] pkt [〜#〜] 2012が表示されますか。タイムゾーンをPKTにするにはどうすればよいですか?

19
user1182253

日付自体にはタイムゾーンがありません。 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
23
JB Nizet

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

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

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

4
Tomasz Stanczak

Linuxで実行している場合、システムのどこかに魔法のタイムゾーンファイルがあります。私のgentooの魔法は、コンテンツを含むテキストファイル/ etc/timezoneを作成するだけでした

Europe/Berlin

おかしいのは、dateが常に正しい時間とタイムゾーン(CEST)を与えたが、JavaからGreenwhichに送られたことです。

> date
Thu Sep 18 08:49:14 CEST 2014
4
flaschenpost