当地时间

虽然系统在内部使用基于 UTC 的时间,但应用程序通常会显示 本地时间,即时区的日期和时间。 因此,为了确保结果正确,必须知道函数是预期接收基于 UTC 的时间还是本地时间,以及函数是返回基于 UTC 的时间还是本地时间。

当前的时区设置控制系统如何在 UTC 和本地时间之间进行转换。 可以使用 GetTimeZoneInformation 函数检索当前时区设置。 函数将结果复制到 TIME_ZONE_INFORMATION 结构,并返回一个值,该值指示本地时间当前是标准时间还是夏令时 (DST) 。 可以使用 SetTimeZoneInformation 函数设置时区设置。 若要支持夏令时在每年之间变化的边界,请使用 GetTimeZoneInformationForYearGetDynamicTimeZoneInformationSetDynamicTimeZoneInformation 函数。

若要检索本地时间,请使用 GetLocalTime 函数。 GetLocalTime 根据当前时区设置将系统时间转换为本地时间,并将结果复制到 SYSTEMTIME 结构。 可以使用 SetLocalTime 函数设置系统时间。 SetLocalTime 假定你已指定本地时间,并在设置系统时间之前转换为 UTC。

调用 SetLocalTime 时,系统会使用当前时区信息(包括夏令时设置)来执行转换。 请注意,系统使用当前时间的夏令时设置,而不是你设置的新时间。 因此,为了确保正确结果,请再次调用 SetLocalTime ,因为第一次调用已更新夏令时设置。

若要将基于 UTC 的时间转换为本地时间,请使用 SystemTimeToTzSpecificLocalTime 函数。 若要将本地时间转换为基于 UTC 的时间,请使用 TzSpecificLocalTimeToSystemTime 函数。