#### 22.5.7 State Variables for Time Zones ¶

For compatibility with POSIX, the GNU C Library defines global state variables that depend on time zone rules specified by the `TZ` environment variable. However, these state variables are obsolescent and are planned to be removed in a future version of POSIX, and programs generally should avoid them because they are not thread-safe and their values are specified only when `TZ` uses the proleptic format. See Specifying the Time Zone with `TZ`. Programs should instead use the `tm_gmtoff` and `tm_zone` members of `struct tm`. See Broken-down Time.

Function: `void` tzset `(void)` ¶

  Preliminary: | MT-Safe env locale | AS-Unsafe heap lock | AC-Unsafe lock mem fd | See POSIX Safety Concepts.

  The `tzset` function initializes the state variables from the value of the `TZ` environment variable. It is not usually necessary for your program to call this function, partly because your program should not use the state variables, and partly because this function is called automatically when you use the time conversion functions `localtime`, `mktime`, `strftime`, `strftime_l`, and `wcsftime`, or the deprecated function `ctime`. Behavior is undefined if one thread accesses any of these variables directly while another thread is calling `tzset` or any other function that is required or allowed to behave as if it called `tzset`.

Variable: `char *` tzname `[2]` ¶

  The array `tzname` contains two strings, which are abbreviations of time zones (standard and Daylight Saving) that the user has selected. `tzname[0]` abbreviates a standard time zone (for example, `"EST"`), and `tzname[1]` abbreviates a time zone when daylight saving time is in use (for example, `"EDT"`). These correspond to the std and dst strings (respectively) when the `TZ` environment variable uses the proleptic format. The string values are unspecified if `TZ` uses the geographical format, so it is generally better to use the broken-down time structure’s `tm_zone` member instead.

  In the GNU C Library, the strings have a storage lifetime that lasts indefinitely; on some other platforms, the lifetime lasts only until `TZ` is changed.

  The `tzname` array is initialized by `tzset`. Though the strings are declared as `char *` the user must refrain from modifying them. Modifying the strings will almost certainly lead to trouble.

Variable: `long int` timezone ¶

  This contains the difference between UTC and local standard time, in seconds west of the Prime Meridian. For example, in the U.S. Eastern time zone, the value is `5*60*60`. Unlike the `tm_gmtoff` member of the broken-down time structure, this value is not adjusted for daylight saving, and its sign is reversed. The value is unspecified if `TZ` uses the geographical format, so it is generally better to use the broken-down time structure’s `tm_gmtoff` member instead.

Variable: `int` daylight ¶

  This variable is nonzero if daylight saving time rules apply. A nonzero value does not necessarily mean that daylight saving time is now in effect; it means only that daylight saving time is sometimes in effect. This variable has little or no practical use; it is present for POSIX compatibility.