を使用することができます。 java.util.Dateクラスには†というタイムゾーンは割り当てられていませんが、toString
の実装ではJVMの現在のデフォルトタイムゾーンが混乱しています。
java.util.Date & .Calendar
これは、Javaにバンドル悪名高い厄介java.util.Date、.Calendar、とのSimpleDateFormatクラスを避けるために多くの理由の一つですが避けてください。それらを避けてください。代わりに、次のいずれかを使用します
ジョダタイム
2.3は、以下のジョダ時間でいくつかのサンプルコード。 StackOverflowでもっと多くの例と議論ができます。
DateTimeZone timeZoneLondon = DateTimeZone.forID("Europe/London");
DateTimeZone timeZoneAthens = DateTimeZone.forID("Europe/Athens");
DateTime nowLondon = DateTime.now(timeZoneLondon);
DateTime nowAthens = nowLondon.withZone(timeZoneAthens);
DateTime nowUtc = nowLondon.withZone(DateTimeZone.UTC);
java.timeは
のJava 8以降の新しいjava.time package内蔵しています。このパッケージはJoda-Timeからインスパイアされました。彼らはいくつかの類似点とクラス名を共有していますが、それらは異なっています。それぞれに欠けている機能があります。注目すべき違いの1つは、java.timeがコンストラクタを回避し、静的インスタンス化メソッドを使用する点です。
この質問の場合、同じ方法で動作します。タイムゾーンを指定し、now
メソッドを呼び出して現在の瞬間を取得し、古い不変インスタンスに基づいて新しいインスタンスを作成してタイムゾーンを調整します。
2つの異なるタイムゾーンクラスに注意してください。 1つは、サマータイムとその他の異常のすべてのルールとUTCからのオフセットを含む名前付きタイムゾーンで、もう1つはオフセットのみです。†
ZoneId zoneMontréal = ZoneId.of("America/Montreal");
ZonedDateTime nowMontréal = ZonedDateTime.now (zoneMontréal);
ZoneId zoneTokyo = ZoneId.of("Asia/Tokyo");
ZonedDateTime nowTokyo = nowMontréal.withZoneSameInstant(zoneTokyo);
ZonedDateTime nowUtc = nowMontréal.withZoneSameInstant(ZoneOffset.UTC);
実際java.util.Date
クラスははits source code内に埋め込まれたタイムゾーンを持っていません。しかし、このクラスは、ほとんどの実用的な目的のために、そのタイムゾーンを無視します。したがって、省略形として、j.u.Dateにはタイムゾーンが割り当てられていないと言われることがよくあります。混乱している?はい。 j.u.Dateの混乱を避け、Joda-Timeやjava.timeを使用してください。
[Joda time](http://stackoverflow.com/a/375803/1037210)を使用しますか?それは私の好みです。 – Lion
[この回答](http://stackoverflow.com/questions/230126/how-to-handle-calendar-timezones-using-java)をチェックしてください。それは便利になるかもしれない。 – Gamb
日付の文字列を解析し、対応するタイムゾーンで日付を返すために、日付形式を使用することが最もクリーンな解決策であるWeb上で別のものが見つかりました – Bober02