0

以下のコードは、ローカル タイムゾーン (米国東部標準時間) で正しい時刻を表示することを期待していますが、現在の時刻より 5 時間早く時刻を戻し続けています。私のuserTimeZoneOffset値は -300 です。これは、タイムゾーンの UTC からの正しいオフセット分です。dateAndTimeFormat私にとっては「MM/dd/yyyy h:mm a」に設定されています。

currentDateAndTime以下の変数を取得して、現在のタイムゾーンではなく UTC に基づいて計算するにはどうすればよいですか?

String dateAndTimeFormat = i18nUtil.getValue(locale, "dateAndTimeFormat");
SimpleDateFormat sdf = new SimpleDateFormat(dateAndTimeFormat);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
if (userTimeZoneOffset != null) {
    calendar.add(Calendar.MINUTE, userTimeZoneOffset);
}
String currentDateAndTime = sdf.format(calendar.getTime());
return currentDateAndTime;
4

1 に答える 1

1

コメントで述べたように、Java DateTime/Calendar ライブラリの代わりに Joda-Time を確認する必要があります。

UTC で現在の時刻を取得するには、以下のパッケージをインポートして、次のコード行を呼び出す必要があります。

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;

DateTime utcDateTime = new DateTime(DateTimeZone.UTC);

受け取った DateTime から時間を減算することも望んでいるようです。これには、次のメソッドを呼び出します。

DateTime estDateTime = utcDateTime.minusHours(5);

Joda-Time: http://www.joda.org/joda-time/

于 2013-11-11T22:07:36.043 に答える