---
name: "tzset"
section: "3"
platform: "macos"
package: "Libc"
version: "1752.120.2"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/tzset"
---

# tzset(3)

initialize time conversion information

## NAME

**tzset**, **tzsetwall** – initialize time conversion information

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<time.h\>**

*void*\

**tzset**(*void*);

*void*\

**tzsetwall**(*void*);

## DESCRIPTION

The **tzset**() function initializes time conversion information used by the library routine [localtime(3)](/localtime/3.md). The environment variable TZ specifies how this is done.

If TZ does not appear in the environment, the best available approximation to local wall clock time, as specified by the [tzfile(5)](/tzfile/5.md)-format file #ifdef UNIFDEF\_MOVE\_LOCALTIME */var/db/timezone/localtime*, #else /\* !UNIFDEF\_MOVE\_LOCALTIME \*/ */etc/localtime*, #endif /\* UNIFDEF\_MOVE\_LOCALTIME \*/ is used.

If TZ appears in the environment but its value is a null string, Coordinated Universal Time (UTC) is used (without leap second correction).

If TZ appears in the environment and its value begins with a colon (‘:’), the rest of its value is used as a pathname of a [tzfile(5)](/tzfile/5.md)-format file from which to read the time conversion information. If the first character of the pathname is a slash (‘/’), it is used as an absolute pathname; otherwise, it is used as a pathname relative to the system time conversion information directory.

If its value does not begin with a colon, it is first used as the pathname of a file (as described above) from which to read the time conversion information. If that file cannot be read, the value is then interpreted as a direct specification (the format is described below) of the time conversion information.

If the TZ environment variable does not specify a [tzfile(5)](/tzfile/5.md)-format file and cannot be interpreted as a direct specification, UTC is used.

The **tzsetwall**() function sets things up so that localtime returns the best available approximation of local wall clock time.

## SPECIFICATION FORMAT

When TZ is used directly as a specification of the time conversion information, it must have the following syntax (spaces inserted for clarity):

*std* *offset*\[ *dst* \[*offset*\] \[, *rule*\]\]

Where:

- *std* and *dst*

  Three or more bytes that are the designation for the standard (*std*) or summer (*dst*) time zone.  Only *std* is required; if *dst* is missing, then summer time does not apply in this locale. Upper and lowercase letters are explicitly allowed.  Any characters except a leading colon (‘:’), digits, comma (‘,’), minus (‘-’), plus (‘+’), and ASCII NUL are allowed.

- *offset*

  Indicates the value one must add to the local time to arrive at Coordinated Universal Time.  The *offset* has the form:

  *hh*\[:*mm* \[:*ss*\]\]

  The minutes (*mm*) and seconds (*ss*) are optional.  The hour (*hh*) is required and may be a single digit.  The *offset* following *std* is required.  If no *offset* follows *dst*, summer time is assumed to be one hour ahead of standard time.  One or more digits may be used; the value is always interpreted as a decimal number.  The hour must be between zero and 24, and the minutes (and seconds) — if present — between zero and 59.  If preceded by a (‘-’) the time zone shall be east of the Prime Meridian; otherwise it shall be west (which may be indicated by an optional preceding (‘+’)).

- *rule*

  Indicates when to change to and back from summer time.  The *rule* has the form:

  *date/time,date/time*

  where the first *date* describes when the change from standard to summer time occurs and the second *date* describes when the change back happens.  Each *time* field describes when, in current local time, the change to the other time is made.

  The format of *date* is one of the following:

  - **J** *n*

    The Julian day *n* (1  *n*\
      365\). Leap days are not counted; that is, in all years — including leap years — February 28 is day 59 and March 1 is day 60.  It is impossible to explicitly refer to the occasional February 29.

  - *n*

    The zero-based Julian day (0  *n*\
      365 ) . Leap days are counted, and it is possible to refer to February 29.

  - **M** *m.n.d*

    The *d*'th day (0  *d*\
      6\) of week *n* of month *m* of the year (1  *n*\
      5\), (1  *m*\
      12\), where week 5 means“ the last *d* day in month *m*” which may occur in either the fourth or the fifth week).  Week 1 is the first week in which the *d*'th day occurs.  Day zero is Sunday.

    The *time* has the same format as *offset* except that no leading sign (‘-’) or (‘+’) is allowed.  The default, if *time* is not given, is **02:00:00**.

    If no *rule* is present in the TZ specification, the rules specified by the [tzfile(5)](/tzfile/5.md)-format file *posixrules* in the system time conversion information directory are used, with the standard and summer time offsets from UTC replaced by those specified by the *offset* values in TZ.

For compatibility with System V Release 3.1, a semicolon (‘;’) may be used to separate the *rule* from the rest of the specification.

## FILES

\#ifdef UNIFDEF\_TZDIR\_SYMLINK #else /\* !UNIFDEF\_TZDIR\_SYMLINK \*/ #endif /\* UNIFDEF\_TZDIR\_SYMLINK \*/

- */etc/localtime*

  local time zone file

- */usr/share/zoneinfo*

  time zone directory

- */usr/share/zoneinfo/posixrules*

  rules for POSIX-style TZ's

- */usr/share/zoneinfo/GMT*

  for UTC leap seconds

If the file */usr/share/zoneinfo/GMT* does not exist, UTC leap seconds are loaded from */usr/share/zoneinfo/posixrules*.

## SEE ALSO

[date(1)](/date/1.md), [gettimeofday(2)](/gettimeofday/2.md), [ctime(3)](/ctime/3.md), [getenv(3)](/getenv/3.md), [time(3)](/time/3.md), [tzfile(5)](/tzfile/5.md)

## HISTORY

The **tzset**() and **tzsetwall**() functions first appeared in 4.4BSD.
