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

# tzfile(5)

timezone information

## NAME

**tzfile** – timezone information

## SYNOPSIS

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

## DESCRIPTION

The time zone information files used by [tzset(3)](/tzset/3.md) begin with the magic characters “TZif” to identify them as time zone information files, followed by a character identifying the version of the file's format (as of 2005, either an ASCII NUL or a '2') followed by fifteen bytes containing zeroes reserved for future use, followed by four four-byte values written in a \`\`standard'' byte order (the high-order byte of the value is written first). These values are, in order:

- *tzh\_ttisgmtcnt*

  The number of UTC/local indicators stored in the file.

- *tzh\_ttisstdcnt*

  The number of standard/wall indicators stored in the file.

- *tzh\_leapcnt*

  The number of leap seconds for which data is stored in the file.

- *tzh\_timecnt*

  The number of \`\`transition times'' for which data is stored in the file.

- *tzh\_typecnt*

  The number of \`\`local time types'' for which data is stored in the file (must not be zero).

- *tzh\_charcnt*

  The number of characters of \`\`time zone abbreviation strings'' stored in the file.

The above header is followed by *tzh\_timecnt* four-byte values of type *long*, sorted in ascending order. These values are written in \`\`standard'' byte order. Each is used as a transition time (as returned by [time(3)](/time/3.md)) at which the rules for computing local time change. Next come *tzh\_timecnt* one-byte values of type *unsigned char*; each one tells which of the different types of \`\`local time'' types described in the file is associated with the same-indexed transition time. These values serve as indices into an array of *ttinfo* structures (with *tzh\_typecnt* entries) that appears next in the file; these structures are defined as follows:

```
struct ttinfo {
	long	tt_gmtoff;
	int	tt_isdst;
	unsigned int	tt_abbrind;
};
```

Each structure is written as a four-byte value for *tt\_gmtoff* of type *long*, in a standard byte order, followed by a one-byte value for *tt\_isdst* and a one-byte value for *tt\_abbrind*. In each structure, *tt\_gmtoff* gives the number of seconds to be added to UTC, tt\_isdst tells whether tm\_isdst should be set by [localtime(3)](/localtime/3.md) and *tt\_abbrind* serves as an index into the array of time zone abbreviation characters that follow the ttinfo structure(s) in the file.

Then there are *tzh\_leapcnt* pairs of four-byte values, written in standard byte order; the first value of each pair gives the time (as returned by [time(3)](/time/3.md)) at which a leap second occurs; the second gives the *total* number of leap seconds to be applied after the given time. The pairs of values are sorted in ascending order by time.

Then there are *tzh\_ttisstdcnt* standard/wall indicators, each stored as a one-byte value; they tell whether the transition times associated with local time types were specified as standard time or wall clock time, and are used when a time zone file is used in handling POSIX-style time zone environment variables.

Finally there are *tzh\_ttisgmtcnt* UTC/local indicators, each stored as a one-byte value; they tell whether the transition times associated with local time types were specified as UTC or local time, and are used when a time zone file is used in handling POSIX-style time zone environment variables.

**localtime** uses the first standard-time ttinfo structure in the file (or simply the first ttinfo structure in the absence of a standard-time structure) if either tzh\_timecnt is zero or the time argument is less than the first transition time recorded in the file.

For version-2-format time zone files, the above header and data is followed by a second header and data, identical in format except that eight bytes are used for each transition time or leap second time. After the second header and data comes a newline-enclosed, POSIX-TZ-environment-variable-style string for use in handling instants after the last transition time stored in the file (with nothing between the newlines if there is no POSIX representation for such instants).

## SEE ALSO

[ctime(3)](/ctime/3.md), [time2posix(3)](/time2posix/3.md), [zic(8)](/zic/8.md)
