0

UTC タイム ゾーンの Calendar オブジェクトがあります。すべての DST を念頭に置いて、その Calendar オブジェクトの日付と時刻を PST に変換したいと考えています。次のシグネチャを持つヘルパー関数を作成しようとしています。

private Calendar getPSTTime(Calendar utcTime)
{

}
4

2 に答える 2

1
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"です。

于 2013-02-08T23:55:52.150 に答える
0

Java の時間イベントは、このイベントから 1970 年 1 月 1 日 00:00:00 GMT までのミリ秒数として保存されます (例: ロンドンで発生した場合)。

したがって、java.util.Date または java.util.Calendar で表されるように、Java で日付と時刻について話すときは常に、タイムゾーンに関係なく絶対数について話します。

タイムゾーンは、日付/時刻を文字列として出力しようとする場合にのみ意味があります。頭の上で、それを行う2つの方法を思い出すことができます。

  • Calendar を使用し、タイム ゾーンを設定し、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;
}
于 2013-02-09T01:26:49.263 に答える