/ /カレンダーオブジェクトのタイムゾーン変換[複製] - java、calendar、timezone

カレンダーオブジェクトタイムゾーン変換[複製] - java、calendar、timezone

カレンダーオブジェクトがあります。これはUTC時です。ゾーン。 DSTをすべて念頭に置いて、そのカレンダーオブジェクトの日付と時刻をPSTに変換したいと思います。私は次のシグネチャを持つヘルパー関数を書くことを考えています。

private Calendar getPSTTime(Calendar utcTime)
{

}

回答:

回答№1は1
private 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;
}