_tzset
设置时间环境变量
重要
此 API 不能用于在 Windows 运行时中执行的应用程序。有关详细信息,请参见 CRT functions not supported with /ZW(CRT 函数不支持使用/ZW)。
void _tzset( void );
备注
_tzset 函数使用当前设置环境变量 TZ 分配值到三个全局变量:_daylight、_timezone和 _tzname。 _ftime 和 localtime函数使用这些变量将世界调整时间(UTC) 更改到本地时间,time 函数使用这些变量计算来自系统时间的 UTC。 使用以下语法设置 TZ 环境变量:
set TZ=tzn[+ | –]hh[:mm[:ss] ][dzn]
tzn
三个字母时区名称,例如 PST。 您必须指定从本地时间到 UTC的正确偏移量。hh
区别在于 UTC 和本地时间之间的小时数。 符号 (+) 对于正值是可选的。mm
分钟。 从 hh 之间用冒号 (:)。ss
秒。 从 mm 之间用冒号 (:)。dzn
三个字母夏令时区域,例如 PDT。 如果夏令时实际上不在该位置,设置 TZ,而无需 设置dzn的值。 C 运行库假设使用美国规则实现夏令时 (DST) 的计算。
备注
小心计算时差的符号。由于时差是本地时间到UTC 的偏移量 (而不是相反) ,其符号可能与你直觉期望的相反。对于早于 UTC 的时区,时差是负的;对于某些晚于 UTC的时区,时差是正的。
例如,设置 TZ 环境变量对应于德国的当前时区,输入以下命令行:
set TZ=GST-1GDT
此命令使用 GST 指示德国标准时间,假定UTC 比德国晚一小时 (换言之,德国比 UTC早一小时),并假定德国遵循夏令时。
如果 TZ 值未设置,_tzset 尝试使用操作系统指定的时区信息。 在 windows 操作系统中,此信息在"控制面板"中的日期/时间应用程序中指定。 如果 _tzset 无法获取此信息,默认情况下它使用 PST8PDT(表示太平洋时区)。
当 _tzset 调用时,根据 TZ 环境变量的值,下面的值赋给全局变量 _daylight、_timezone和 _tzname :
全局变量 |
描述 |
默认值 |
---|---|---|
_daylight |
非零值,如果夏令时在 TZ 指定设置;否则为0。 |
1 |
_timezone |
区别在于 UTC 和本地时间之间的小时数。 |
28800 (28800 秒等于 8 小时) |
_tzname[0] |
如果 TZ 未设置,来自TZ 环境变量的该时区名称的字符串值为空。 |
PST |
_tzname[1] |
如果夏令时从 TZ 环境变量中略去,则夏令时的字符串值为空。 |
PDT |
在 _daylight 的前表中显示的默认值和 _tzname 数组对应于“PST8PDT”。如果 DST 区域从 TZ 环境变量中被略去,_daylight 的值为 0,_ftime、gmtime和 localtime 函数返回 0(用于DST 标志)。
要求
例程 |
必需的标头 |
---|---|
_tzset |
<time.h> |
有关更多信息,请参见Compatibility。
示例
// crt_tzset.cpp
// This program uses _tzset to set the global variables
// named _daylight, _timezone, and _tzname. Since TZ is
// not being explicitly set, it uses the system time.
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
_tzset();
int daylight;
_get_daylight( &daylight );
printf( "_daylight = %d\n", daylight );
long timezone;
_get_timezone( &timezone );
printf( "_timezone = %ld\n", timezone );
size_t s;
char tzname[100];
_get_tzname( &s, tzname, sizeof(tzname), 0 );
printf( "_tzname[0] = %s\n", tzname );
exit( 0 );
}
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见平台调用示例。