1

Windows では、 を呼び出すだけで簡単に UTC 変換を行うことができますGetTimeZoneInformation。結果として返される構造体には、標準時用と DST 用の 2 つの異なるバイアス値と、BiasCode現在どちらを使用しているかを表す があります。そして、今の瞬間だけを気にするのであれば、それは問題ありません。

しかし、今後のイベントに関するデータを取得するためにユーザーが呼び出す API があります。データはローカル時間でデータベースに保存され、ユーザーは UTC でそれを望んでいるので、変換を実行するとすべて問題ありません...数週間以内に時間の変更が行われることを除いて. そして、今日の偏りで時間の変化の反対側のイベントを報告すると、それらは 1 時間ずれます。

のように動作するものGetTimeZoneInformationBiasCodeありますか? (もちろん、ルールは年ごとに変わることは承知しています。私は、数週間先の未来を見据えたものを探しているわけではありません。)

4

1 に答える 1

2

SystemTimeToTzSpecificLocalTime-MSDNを引用させてください-

協定世界時 (UTC) の時刻を、指定されたタイム ゾーンの対応する現地時刻に変換します。

過去と未来の両方の入力 UTC 時間を提供し、その特定の時点での DST 設定に関するすべての詳細を考慮して、現地時間変換を取得できます。

TzSpecificLocalTimeToSystemTime逆変換を行うツイン関数です。

私にとってさらに重要と思われる問題は、DST 設定が同じ地域であっても時々変更され、変換が年ごとに異なる可能性があることです (これは確かに、主に過去のイベントに影響し、将来ではありません)。この API もこれを処理し、DST ルールの変更履歴を経時的に追跡していると思います。

アップデート。仮定は正しく、MSDN は次のように述べています。

  • タイム ゾーンは、古い年と新しい年で異なる UTC オフセットを使用します。
  • 変換する UTC 時刻と計算された現地時刻の年が異なります。
于 2012-09-07T21:42:36.540 に答える