_get_tzname
Retrieves the character string representation of the time zone name or the daylight standard time (DST) zone name.
Syntax
errno_t _get_tzname(
size_t* pReturnValue,
char* timeZoneName,
size_t sizeInBytes,
int index
);
Parameters
pReturnValue
The string length of timeZoneName
including a NULL
terminator.
timeZoneName
The address of a character string for the representation of the time zone name or the daylight standard time zone name (DST), depending on index
.
sizeInBytes
The size of the timeZoneName
character string in bytes.
index
The index
of one of the two time zone names to retrieve.
index |
Contents of timeZoneName |
timeZoneName default value |
---|---|---|
0 | Time zone name | "PST" |
1 | Daylight standard time zone name | "PDT" |
> 1 or < 0 | errno set to EINVAL |
not modified |
Unless explicitly updated during runtime, "PST"
is returned for the standard time zone and "PDT"
for the daylight standard time zone. For more information, see the Remarks.
The time zone string isn't guaranteed to be the same between OS releases. Official time zone names can and do change.
Return value
Zero if successful, otherwise an errno
type value.
If either timeZoneName
is NULL
, or sizeInBytes
is zero or less than zero (but not both), an invalid parameter handler is invoked, as described in Parameter validation. If execution is allowed to continue, this function sets errno
to EINVAL
and returns EINVAL
.
Error conditions
pReturnValue |
timeZoneName |
sizeInBytes |
index |
Return value | Contents of timeZoneName |
---|---|---|---|---|---|
size of TZ name | NULL |
0 | 0 or 1 | 0 | not modified |
size of TZ name | any | > 0 | 0 or 1 | 0 | TZ name |
not modified | NULL |
> 0 | any | EINVAL |
not modified |
not modified | any | zero | any | EINVAL |
not modified |
not modified | any | > 0 | > 1 | EINVAL |
not modified |
Remarks
The _get_tzname
function retrieves the character string representation of the current time zone name or the daylight standard time zone name (DST) into the address of timeZoneName
depending on the index
value, along with the size of the string in pReturnValue
. If timeZoneName
is NULL
and sizeInBytes
is zero, the size of the string in bytes required to hold both the specified time zone, and a terminating NULL
, is returned in pReturnValue
.
The index
values must be either 0 for standard time zone or 1 for daylight standard time zone; any other values have undetermined results.
By default, "PST"
is returned for the standard time zone and "PDT"
for the daylight standard time zone. The true time zone name is updated the first time it's needed by a function that requires time zone information, such as strftime
, ftime
, ftime_s
, mktime
, localtime
, and others. If a function that doesn't require time zone information isn't called prior to calling _get_tzname
, the default values are returned unless you first explicitly update them using one of the functions mentioned, or by a call to tzset
. Also, if the TZ
environment variable is set, it takes precedence over the time zone name reported by the OS. Even in this case, one of the functions mentioned above must be called before _get_tzname
is called or the default time zone value will be returned. For more information about the TZ
environment variable and the CRT, see _tzset
.
Warning
The time zone string is not guaranteed to be the same between OS releases. Official time zone names can and do change.
By default, this function's global state is scoped to the application. To change this behavior, see Global state in the CRT.
Example
This sample calls _get_tzname
to get the required buffer size to display the current Daylight standard time zone name, allocates a buffer of that size, calls _get_tzname
again to load the name in the buffer, and prints it to the console.
It also calls _tzset()
to cause the OS to update the time zone information before calling _get_tzname()
. Otherwise, the default values are used.
// 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;
}
Output
The current Daylight standard time zone name is Pacific Daylight Time.
Requirements
Routine | Required header |
---|---|
_get_tzname |
<time.h> |
For more information, see Compatibility.
See also
Time management
errno
, _doserrno
, _sys_errlist
, and _sys_nerr
_get_daylight
_get_dstbias
_get_timezone