0

この質問に関連する投稿が非常に多いことは知っていますが、どれも私の疑問を明確にすることができませんでした.

ユーザーからのDateTime値をグローバル定数(UTC)ミリ秒値で保存する必要があるため、別のタイムゾーンに変換するのに役立ちます。そのために、2つの異なるタイムゾーンでいくつかのテストを行いました。以下は私が試したことです:

タイムゾーンあり - PDT (GMT - 7)

DateTime dateTime = new DateTime(2013, 07, 04, 1, 19, 22);
String format = "yyyy-MM-dd HH:mm:ss Z";

int offsetMinutes = (dateTime.getZone().getOffset(dateTime)/1000)/60;

log.info(" Current Timezone => "+dateTime.getZone()+", OffSet => "+offsetMinutes);
log.info(" dateTime => "+dateTime.toString(format)+" => "+dateTime.getMillis());

UTC で同じ DateTime を使用

DateTime utcDateTime = dateTime.withZone(DateTimeZone.UTC);
offsetMinutes = (utcDateTime.getZone().getOffset(utcDateTime)/1000)/60;

log.info(" Current Timezone => "+utcDateTime.getZone()+", OffSet "+offsetMinutes);
log.info(" dateTime => "+utcDateTime.toString(format)+" => "+utcDateTime.getMillis());

以下は私が得た結果です:

太平洋夏時間 (GMT - 7)

Current Timezone => America/Los_Angeles, OffSet => -420 (-7)
dateTime => 2013-07-04 01:19:22 -0700 => 1372925962000
Current Timezone => UTC, OffSet 0
dateTime => 2013-07-04 08:19:22 +0000 => 1372925962000

GMT +5:30

Current Timezone => Asia/Kolkata, OffSet => 330 (+5:30)
dateTime => 2013-07-04 01:19:22 +0530 => 1372880962000
Current Timezone => UTC, OffSet 0
dateTime => 2013-07-03 19:49:22 +0000 => 1372880962000

問題は、

  1. PDT タイムゾーンでは、ローカル ミリ秒と UTC ミリ秒が同じなのはなぜですか? (IST タイムゾーンと同じ)

  2. 2 つの異なる TimeZone の UTC 値が異なるのはなぜですか?

utc がグローバル定数であると想定されている場合、値は 2 つの異なるタイムゾーンで同じである必要があります。

誰かが私の疑問を明確にすることができますか、私は間違っていますか?

どんな提案や説明も本当に役に立ちます

ありがとうラメッシュ

4

2 に答える 2

4

ユーザーからの DateTime 値をグローバル定数 (UTC) ミリ秒値で保存する必要があります

次に、適切なローカル日付/時刻とタイム ゾーンで構築さgetMillis()れたを呼び出すだけです。DateTime使う必要は全くありませんwithZone。タイムゾーンの移行により、一部のローカル日付/時間/ゾーンの組み合わせがあいまいになったり、スキップされたりする可能性があることに注意してください。そのような状況で何をしたいのかを考えるべきです。

PDT タイムゾーンで、ローカル ミリ秒と UTC ミリ秒が同じである理由

を呼び出しているためです。getMillis()これは、UNIX エポックからのミリ秒数です。これは、タイム ゾーンに関係なく、ある瞬間をグローバルに表したものです。

2 つの異なる TimeZone の UTC 値が異なるのはなぜですか?

現地時間は同じままですが、タイム ゾーンが変更されています。つまり、別の瞬間を参照していることになります。

于 2013-07-04T08:30:56.650 に答える
0

ユーザーからの DateTime 値をグローバル定数 (UTC) ミリ秒値で保存する必要があるため、別のタイムゾーンへの変換に役立ちます

そして、それを正確にどのように保存しますか?

テスト コードの出力が明確に示すように、Just Works(tm) です。Unix エポックは、1970 年 1 月 1 日 GMT (通常は秒単位ですが、Java では代わりにミリ秒単位で出力されます) から始まる時点の表現です。それを使用して、任意のタイムゾーンに変換できます。

ただし、最良のオプションは、ユーザーが入力した日付タイムゾーンの両方を保存することです。このようにして、必要な計算を行うことができます。

于 2013-07-04T08:36:49.870 に答える