カレンダーオブジェクトがあります。これはUTC時です。ゾーン。 DSTをすべて念頭に置いて、そのカレンダーオブジェクトの日付と時刻をPSTに変換したいと思います。私は次のシグネチャを持つヘルパー関数を書くことを考えています。
private Calendar getPSTTime(Calendar utcTime)
{
}
回答:
回答№1は1private Calendar getPSTTime(Calendar utcTime)
{
TimeZone americaPacific = TimeZone.getTimeZone("America/Los_Angeles");
Calendar pacificTime = Calendar.getInstance(americaPacific);
pacificTime.setTime(utcTime.getTime());
return pacificTime;
}
FYI:利用可能なすべてのタイムゾーン文字列識別子はメソッドによって返されます TimeZone.getAvailableIDs()
。それは私が得たところです "America/Los_Angeles"
から。
回答№2の場合は0
JavaのTimeイベントは、このイベントと1970年1月1日00:00:00 GMTの間のミリ秒数として格納されます(たとえば、ロンドンで発生した場合)。
そのため、java.util.Dateやjava.util.Calendarで表されるように、Javaで日付と時刻を話すときはいつでも、タイムゾーンに関係なく、常に絶対数について話すことになります。
タイムゾーンは、日付/時刻を文字列として出力しようとしたときにのみ意味があります。私の頭の上に私はそれを行う2つの方法を思い出すことができます。
- カレンダーを使用し、タイムゾーンを設定し、get(Calendar.XXX)メソッドを使用して、必要なタイムゾーンの個々の日付/時刻コンポーネントを取得します。
- SimpleDateTimeFormatを使用してタイムゾーンを設定し、必要なタイムゾーンで日付/時刻全体を単一の文字列にフォーマットします。
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;
}