ローカル時刻

システムは内部的に UTC ベースの時刻を使用しますが、通常、アプリケーションには ローカル時刻 (タイム ゾーンの日付と時刻) が表示されます。 そのため、正しい結果を得るには、関数が UTC ベースの時刻と現地時刻のどちらを受け取る必要があるか、関数が UTC ベースの時刻または現地時刻を返すのかを認識する必要があります。

現在のタイム ゾーン設定は、システムが UTC と現地時刻の間で変換する方法を制御します。 GetTimeZoneInformation 関数を使用して、現在のタイム ゾーン設定を取得できます。 関数は、結果を TIME_ZONE_INFORMATION 構造体にコピーし、ローカル時刻が現在標準時か夏時間 (DST) かを示す値を返します。 タイム ゾーンの設定は、 SetTimeZoneInformation 関数を使用して設定できます。 年ごとに変更される夏時間の境界をサポートするには、 GetTimeZoneInformationForYearGetDynamicTimeZoneInformationおよび SetDynamicTimeZoneInformation 関数を 使用します。

ローカル時刻を取得するには、 GetLocalTime 関数を使用します。 GetLocalTime は 、現在のタイム ゾーン設定に基づいてシステム時刻をローカル時刻に変換し、結果を SYSTEMTIME 構造体にコピーします。 システム時刻は、 SetLocalTime 関数を使用して設定できます。 SetLocalTime では、システム時刻を設定する前に、現地時刻を指定し、UTC に変換していることを前提としています。

SetLocalTime を呼び出すと、システムは夏時間設定を含む現在のタイム ゾーン情報を使用して変換を実行します。 システムでは、設定する新しい時刻ではなく、現在の時刻の夏時間設定が使用されることに注意してください。 したがって、正しい結果を得るために、 SetLocalTime を 2 回目に呼び出します。最初の呼び出しで夏時間の設定が更新されました。

UTC ベースの時刻を現地時刻に変換するには、 SystemTimeToTzSpecificLocalTime 関数を使用します。 現地時刻を UTC ベースの時刻に変換するには、 TzSpecificLocalTimeToSystemTime 関数を使用します。