_get_tzname
检索时区名称或夏令时 (DST) 标准时区名称的字符串表示形式。
语法
errno_t _get_tzname(
size_t* pReturnValue,
char* timeZoneName,
size_t sizeInBytes,
int index
);
参数
pReturnValue
包括 NULL
终止符的 timeZoneName
的字符串长度。
timeZoneName
具体取决于 index
的时区名称或夏令时标准时区名称 (DST) 表示形式的字符串的地址。
sizeInBytes
timeZoneName
字符串的大小,以字节为单位。
index
要检索的两个时区名称之一的 index
。
index |
timeZoneName 的内容 |
timeZoneName 默认值 |
---|---|---|
0 | 时区名称 | "PST" |
1 | 夏令时标准时区名称 | "PDT" |
> 1 或 < 0 | 将 errno 设置为 EINVAL |
未修改 |
除非在运行时期间显式更新,否则为标准时区返回 "PST"
,为夏令时标准时区返回 "PDT"
。 有关详细信息,请参阅注解部分。
不保证 OS 版本之间的时区字符串相同。 官方时区名称可以而且确实会更改。
返回值
如果成功,则为零;否则为 errno
类型值。
如果 timeZoneName
为 NULL
,或 sizeInBytes
为零或小于零(但不同时满足以上两个条件),则调用无效参数句柄,如参数验证中所述。 如果允许执行继续,则该函数将 errno
设置为 EINVAL
并返回 EINVAL
。
错误条件
pReturnValue |
timeZoneName |
sizeInBytes |
index |
返回值 | timeZoneName 的内容 |
---|---|---|---|---|---|
TZ 名称的大小 | NULL |
0 | 0 或 1 | 0 | 未修改 |
TZ 名称的大小 | 任意 | > 0 | 0 或 1 | 0 | TZ 名称 |
未修改 | NULL |
> 0 | 任意 | EINVAL |
未修改 |
未修改 | any | 零 | any | EINVAL |
未修改 |
未修改 | 任意 | > 0 | > 1 | EINVAL |
未修改 |
备注
_get_tzname
函数根据 index
值检索 timeZoneName
地址中的当前时区名称或夏令时标准时区名称 (DST) 的字符串表示形式,并检索 pReturnValue
中字符串的大小。 如果 timeZoneName
为 NULL
并且 sizeInBytes
为零,则在 pReturnValue
中返回保存指定时区和终止 NULL
所需的字符串大小(以字节为单位)。
标准时区的 index
值必须为 0,夏令时标准时区的值必须为 1;任何其他值都具有不确定的结果。
默认情况下,对于标准时区返回 "PST"
,对于夏令时标准时区返回 "PDT"
。 真实的时区名称会在要求提供时区信息(如 strftime
、ftime
、ftime_s
、mktime
、localtime
等)的函数首次需要时区名称时更新。 如果在调用 _get_tzname
之前未调用不需要时区信息的函数,则将返回默认值,除非首先使用提到的函数之一或通过调用 tzset
显式更新它们。 此外,如果设置了环境变量 TZ
,则其优先于 OS 报告的时区名称。 即使在这种情况下,上述函数之一也必须在调用之前 _get_tzname
调用,否则将返回默认时区值。 有关环境变量 TZ
和 CRT 的详细信息,请参阅 _tzset
。
警告
不保证 OS 版本之间的时区字符串相同。 官方时区名称可以而且确实会更改。
默认情况下,此函数的全局状态范围限定为应用程序。 要更改此行为,请参阅 CRT 中的全局状态。
示例
此示例调用 _get_tzname
获取所需的缓冲区大小以显示当前的夏令时标准时区名称、分配该大小的缓冲区、再次调用 _get_tzname
以加载缓冲区中的名称,并将其输出到控制台。
它还调用 _tzset()
以使 OS 在调用 _get_tzname()
之前更新时区信息。 否则使用默认值。
// crt_get_tzname.c
// Compile by using: cl /W4 crt_get_tzname.c
#include <stdio.h>
#include <time.h>
#include <malloc.h>
enum TZindex {
STD,
DST
};
int main()
{
size_t tznameSize = 0;
char * tznameBuffer = NULL;
_tzset(); // Update the time zone information
// Get the size of buffer required to hold DST time zone name
if (_get_tzname(&tznameSize, NULL, 0, DST))
{
return 1; // Return an error value if it failed
}
// Allocate a buffer for the name
if (NULL == (tznameBuffer = (char *)(malloc(tznameSize))))
{
return 2; // Return an error value if it failed
}
// Load the name in the buffer
if (_get_tzname(&tznameSize, tznameBuffer, tznameSize, DST))
{
return 3; // Return an error value if it failed
}
printf_s("The current Daylight standard time zone name is %s.\n", tznameBuffer);
return 0;
}
输出
The current Daylight standard time zone name is Pacific Daylight Time.
要求
例程 | 必需的标头 |
---|---|
_get_tzname |
<time.h> |
有关详细信息,请参阅兼容性。
另请参阅
工时管理
errno
、_doserrno
、_sys_errlist
和 _sys_nerr
_get_daylight
_get_dstbias
_get_timezone