UTC タイム ゾーンの Calendar オブジェクトがあります。すべての DST を念頭に置いて、その Calendar オブジェクトの日付と時刻を PST に変換したいと考えています。次のシグネチャを持つヘルパー関数を作成しようとしています。
private Calendar getPSTTime(Calendar utcTime)
{
}
private Calendar getPSTTime(Calendar utcTime)
{
TimeZone americaPacific = TimeZone.getTimeZone("America/Los_Angeles");
Calendar pacificTime = Calendar.getInstance(americaPacific);
pacificTime.setTime(utcTime.getTime());
return pacificTime;
}
参考: 利用可能なすべてのタイム ゾーン文字列識別子は、メソッドによって返されTimeZone.getAvailableIDs()
ます。それが私が得た場所"America/Los_Angeles"
です。
Java の時間イベントは、このイベントから 1970 年 1 月 1 日 00:00:00 GMT までのミリ秒数として保存されます (例: ロンドンで発生した場合)。
したがって、java.util.Date または java.util.Calendar で表されるように、Java で日付と時刻について話すときは常に、タイムゾーンに関係なく絶対数について話します。
タイムゾーンは、日付/時刻を文字列として出力しようとする場合にのみ意味があります。頭の上で、それを行う2つの方法を思い出すことができます。
Java には「タイム ゾーン変換」のようなものは実際にはありませんが、タイム ゾーン固有の書式設定があります。
ただし、物事を本当に混乱させたい場合は、カレンダーの時間値に「修正」を追加して、PST タイムゾーンであるかのようにフィールド値を返すようにすることができます。
private Calendar getPSTTime(Calendar utcTime)
{
TimeZone pstZ = TimeZone.getTimeZone("America/Los_Angeles");
long offset = pstZ.getOffset(utcTime.getTime());
Calendar pacificTime = Calendar.getInstance();
pacificTime.setTimeInMillis(utcTime.getTimeInMillis()-offset);
return pacificTime;
}