DYNAMIC_TIME_ZONE_INFORMATION 结构 (timezoneapi.h)
指定时区和动态夏令时的设置。
语法
typedef struct _TIME_DYNAMIC_ZONE_INFORMATION {
LONG Bias;
WCHAR StandardName[32];
SYSTEMTIME StandardDate;
LONG StandardBias;
WCHAR DaylightName[32];
SYSTEMTIME DaylightDate;
LONG DaylightBias;
WCHAR TimeZoneKeyName[128];
BOOLEAN DynamicDaylightTimeDisabled;
} DYNAMIC_TIME_ZONE_INFORMATION, *PDYNAMIC_TIME_ZONE_INFORMATION;
成员
Bias
此计算机上本地时间转换的当前偏差(以分钟计)。 偏差是协调世界时 (UTC) 和本地时间之间的差异(以分钟为单位)。 UTC 和本地时间之间的所有翻译都基于以下公式:
UTC = 本地时间 + 偏差
此成员是必需的。
StandardName[32]
标准时间的说明。 例如,“EST”可能表示东部标准时间。 该字符串将由 GetDynamicTimeZoneInformation 函数返回不变。 此字符串可以为空。
StandardDate
一个 SYSTEMTIME 结构,包含从夏令时到标准时间在此操作系统上发生转换的日期和本地时间。 如果时区不支持夏令时,或者调用方需要禁用夏令时,则 SYSTEMTIME 结构中的 wMonth 成员必须为零。 如果指定了此日期,则还必须指定此结构的 DaylightDate 成员。 否则,系统会假定时区数据无效,并且不会应用任何更改。
若要选择月份中的正确日期,请将 wYear 成员设置为零, 将 wHour 和 wMinute 成员设置为过渡时间, 将 wDayOfWeek 成员设置为适当的工作日,将 wDay 成员设置为指示一个月内星期几的发生时间 (1 到 5,其中 5 指示当月的最后一天,如果一周中的某一天没有发生 5 次) 。
使用此表示法,指定 4 月第一个星期日的 02:00,如下所示: wHour = 2, wMonth = 4, wDayOfWeek = 0, wDay = 1。 在 10 月的最后一个星期四指定 02:00,如下所示: wHour = 2, wMonth = 10, wDayOfWeek = 4, wDay = 5。
如果 wYear 成员不为零,则转换日期为绝对日期;它只会发生一次。 否则,它是每年发生的相对日期。
StandardBias
在标准时间发生的本地时间转换期间使用的偏差值。 如果未提供 StandardDate 成员的值,则忽略此成员。
此值将添加到 Bias 成员的值中,以形成标准时间中使用的偏差。 在大多数时区中,此成员的值为零。
DaylightName[32]
夏令时 (DST) 的说明。 例如,“PDT”可能表示太平洋夏令时。 该字符串将由 GetDynamicTimeZoneInformation 函数返回不变。 此字符串可以为空。
DaylightDate
一个 SYSTEMTIME 结构,包含从标准时间到夏令时在此操作系统上发生转换的日期和本地时间。 如果时区不支持夏令时,或者调用方需要禁用夏令时,则 SYSTEMTIME 结构中的 wMonth 成员必须为零。 如果指定了此日期,则还必须指定此结构中的 StandardDate 成员。 否则,系统会假定时区数据无效,并且不会应用任何更改。
若要选择月份中的正确日期,请将 wYear 成员设置为零, 将 wHour 和 wMinute 成员设置为过渡时间, 将 wDayOfWeek 成员设置为适当的工作日,将 wDay 成员设置为指示一个月内星期几的发生时间 (1 到 5,其中 5 指示当月的最后一天,如果一周中的某一天没有发生 5 次) 。
如果 wYear 成员不为零,则转换日期为绝对日期;它只会发生一次。 否则,它是每年发生的相对日期。
DaylightBias
在夏令时发生的本地时间转换期间使用的偏差值。 如果未提供 DaylightDate 成员的值,则忽略此成员。
此值将添加到 Bias 成员的值,以形成夏令时使用的偏差。 在大多数时区中,此成员的值为 –60。
TimeZoneKeyName[128]
本地计算机上的时区注册表项的名称。 有关详细信息,请参阅“备注”。
DynamicDaylightTimeDisabled
指示是否禁用动态夏令时。 将此成员设置为 TRUE 会禁用动态夏令时,导致系统使用一组固定的转换日期。
若要还原动态夏令时,请在 DynamicDaylightTimeDisabled 设置为 FALSE 的情况下调用 SetDynamicTimeZoneInformation 函数。 系统将在下次更新、下一次系统重启或日历年结束时读取当前年份的转换日期, (以先到者为准。)
调用 GetDynamicTimeZoneInformation 函数时,如果时区是使用 SetTimeZoneInformation 函数而不是 SetDynamicTimeZoneInformation 设置的,或者如果用户已使用 控制面板 中的日期和时间应用程序禁用此功能,则此成员为 TRUE。
若要禁用夏令时,请将此成员设置为 TRUE,清除 StandardDate 和 DaylightDate 成员,并调用 SetDynamicTimeZoneInformation。 若要还原夏令时,请调用 SetDynamicTimeZoneInformation ,同时 将 DynamicDaylightTimeDisabled 设置为 FALSE。
注解
动态夏令时支持夏令时边界逐年变化的时区。 此功能可以更轻松地更新系统,尤其是预先知道每年 DST 边界的区域设置。 更新时区后,会将当前时区设置应用于所有时间操作,即使有关时间发生在时区更改之前也是如此。 因此,最好存储 UTC 时间并将其转换为当前本地时区。
可以使用 SetDynamicTimeZoneInformation 函数设置当前年份的转换日期。 若要设置将来的转换日期,必须将条目添加到注册表数据。 动态夏令时设置存储在以下注册表项中:
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Time Zones time_zone_name Dynamic DST
每个 动态 DST 项都包含以下注册表值。
注册表值 | 类型 | 说明 |
---|---|---|
FirstEntry | REG_DWORD | 表中的第一年。 |
LastEntry | REG_DWORD | 表中的最后一年。 |
year1 | REG_BINARY |
以下时区信息。
|
year2 | REG_BINARY | REG_TZI_FORMAT结构。 |
渴望 | REG_BINARY | REG_TZI_FORMAT结构。 |
有关 时区 键中其他值的详细信息,请参阅 TIME_ZONE_INFORMATION。
StandardName 和 DaylightName 均根据当前用户的默认 UI 语言进行本地化。
要求
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
标头 | timezoneapi.h (包括 Timezoneapi.h、Windows.h) |