1
0
mirror of https://frontier.innolan.net/rainlance/amiga-tz.git synced 2025-10-05 22:42:06 +00:00

Amiga Time Zone Library initial commit

This commit is contained in:
llsth
2015-07-25 23:35:51 +02:00
parent 7e4241f29a
commit debdc613c8
203 changed files with 19834 additions and 11640 deletions

203
doc/date.1 Normal file
View File

@ -0,0 +1,203 @@
.TH DATE 1
.SH NAME
date \- show and set date and time
.SH SYNOPSIS
.if n .nh
.if n .na
.ie \n(.g .ds - \f(CW-\fP
.el ds - \-
.B date
[
.B \*-u
] [
.B \*-c
] [
.B \*-r
.I seconds
] [
.B \*-n
] [
.B \*-d
.I dsttype
] [
.B \*-t
.I minutes-west
] [
\fB\*-a \fR[\fB+\fR|\fB\*-]\fIsss\fB.\fIfff\fR
] [
.BI + format
] [
\fR[\fIyyyy\fR]\fImmddhhmm\fR[\fIyy\fR][\fB.\fIss\fR]
]
.SH DESCRIPTION
.ie '\(lq'' .ds lq \&"\"
.el .ds lq \(lq\"
.ie '\(rq'' .ds rq \&"\"
.el .ds rq \(rq\"
.de q
\\$3\*(lq\\$1\*(rq\\$2
..
.I Date
without arguments writes the date and time to the standard output in
the form
.ce 1
Wed Mar 8 14:54:40 EST 1989
.br
with
.B EST
replaced by the local time zone's abbreviation
(or by the abbreviation for the time zone specified in the
.B TZ
environment variable if set).
The exact output format depends on the locale.
.PP
If a command-line argument starts with a plus sign (\c
.q "\fB+\fP" ),
the rest of the argument is used as a
.I format
that controls what appears in the output.
In the format, when a percent sign (\c
.q "\fB%\fP"
appears,
it and the character after it are not output,
but rather identify part of the date or time
to be output in a particular way
(or identify a special character to output):
.nf
.sp
.if t .in +.5i
.if n .in +2
.ta \w'%M\0\0'u +\w'Wed Mar 8 14:54:40 EST 1989\0\0'u
Sample output Explanation
%a Wed Abbreviated weekday name*
%A Wednesday Full weekday name*
%b Mar Abbreviated month name*
%B March Full month name*
%c Wed Mar 08 14:54:40 1989 Date and time*
%C 19 Century
%d 08 Day of month (always two digits)
%D 03/08/89 Month/day/year (eight characters)
%e 8 Day of month (leading zero blanked)
%h Mar Abbreviated month name*
%H 14 24-hour-clock hour (two digits)
%I 02 12-hour-clock hour (two digits)
%j 067 Julian day number (three digits)
%k 2 12-hour-clock hour (leading zero blanked)
%l 14 24-hour-clock hour (leading zero blanked)
%m 03 Month number (two digits)
%M 54 Minute (two digits)
%n \\n newline character
%p PM AM/PM designation
%r 02:54:40 PM Hour:minute:second AM/PM designation
%R 14:54 Hour:minute
%S 40 Second (two digits)
%t \\t tab character
%T 14:54:40 Hour:minute:second
%U 10 Sunday-based week number (two digits)
%w 3 Day number (one digit, Sunday is 0)
%W 10 Monday-based week number (two digits)
%x 03/08/89 Date*
%X 14:54:40 Time*
%y 89 Last two digits of year
%Y 1989 Year in full
%Z EST Time zone abbreviation
%+ Wed Mar 8 14:54:40 EST 1989 Default output format*
.if t .in -.5i
.if n .in -2
* The exact output depends on the locale.
.sp
.fi
If a character other than one of those shown above appears after
a percent sign in the format,
that following character is output.
All other characters in the format are copied unchanged to the output;
a newline character is always added at the end of the output.
.PP
In Sunday-based week numbering,
the first Sunday of the year begins week 1;
days preceding it are part of
.q "week 0" .
In Monday-based week numbering,
the first Monday of the year begins week 1.
.PP
To set the date, use a command line argument with one of the following forms:
.nf
.if t .in +.5i
.if n .in +2
.ta \w'198903081454\0'u
1454 24-hour-clock hours (first two digits) and minutes
081454 Month day (first two digits), hours, and minutes
03081454 Month (two digits, January is 01), month day, hours, minutes
8903081454 Year, month, month day, hours, minutes
0308145489 Month, month day, hours, minutes, year
(on System V-compatible systems)
030814541989 Month, month day, hours, minutes, four-digit year
198903081454 Four-digit year, month, month day, hours, minutes
.if t .in -.5i
.if n .in -2
.fi
If the century, year, month, or month day is not given,
the current value is used.
Any of the above forms may be followed by a period and two digits that give
the seconds part of the new time; if no seconds are given, zero is assumed.
.PP
These options are available:
.TP
.BR \*-u " or " \*-c
Use Universal Time when setting and showing the date and time.
.TP
.BI "\*-r " seconds
Output the date that corresponds to
.I seconds
past the epoch of 1970-01-01 00:00:00 UTC, where
.I seconds
should be an integer, either decimal, octal (leading 0), or
hexadecimal (leading 0x), preceded by an optional sign.
.TP
.B \*-n
Do not notify other networked systems of the time change.
.TP
.BI "\*-d " dsttype
Set the kernel-stored Daylight Saving Time type to the given value.
(The kernel-stored DST type is used mostly by
.q "old"
binaries.)
.TP
.BI "\*-t " minutes-west
Set the kernel-stored
.q "minutes west of UTC"
value to the one given on the
command line.
(The kernel-stored DST type is used mostly by
.q "old"
binaries.)
.TP
.BI "\*-a " adjustment
Change the time forward (or backward) by the number of seconds
(and fractions thereof) specified in the
.I adjustment
argument.
Either the seconds part or the fractions part of the argument (but not both)
may be omitted.
On BSD-based systems,
the adjustment is made by changing the rate at which time advances;
on System-V-based systems, the adjustment is made by changing the time.
.SH FILES
.ta \w'/usr/local/etc/zoneinfo/posixrules\0\0'u
/usr/lib/locale/\f2L\fP/LC_TIME description of time locale \f2L\fP
.br
/usr/local/etc/zoneinfo time zone information directory
.br
/usr/local/etc/zoneinfo/localtime local time zone file
.br
/usr/local/etc/zoneinfo/posixrules used with POSIX-style TZ's
.br
/usr/local/etc/zoneinfo/GMT for UTC leap seconds
.sp
If
.B /usr/local/etc/zoneinfo/GMT
is absent,
UTC leap seconds are loaded from
.BR /usr/local/etc/zoneinfo/posixrules .
.\" This file is in the public domain, so clarified as of
.\" 2009-05-17 by Arthur David Olson.

306
doc/newctime.3 Normal file
View File

@ -0,0 +1,306 @@
.TH NEWCTIME 3
.SH NAME
asctime, ctime, difftime, gmtime, localtime, mktime \- convert date and time
.SH SYNOPSIS
.nf
.ie \n(.g .ds - \f(CW-\fP
.el ds - \-
.B #include <time.h>
.PP
.B extern char *tzname[2];
.PP
.B char *ctime(time_t const *clock);
.PP
.B char *ctime_r(time_t const *clock, char *buf);
.PP
.B double difftime(time_t time1, time_t time0);
.PP
.B char *asctime(struct tm const *tm);
.PP
.B "char *asctime_r(struct tm const *restrict tm,"
.B " char *restrict result);"
.PP
.B struct tm *localtime(time_t const *clock);
.PP
.B "struct tm *localtime_r(time_t const *restrict clock,"
.B " struct tm *restrict result);"
.PP
.B "struct tm *localtime_rz(timezone_t restrict zone,"
.B " time_t const *restrict clock,"
.B " struct tm *restrict result);"
.PP
.B struct tm *gmtime(time_t const *clock);
.PP
.B "struct tm *gmtime_r(time_t const *restrict clock,"
.B " struct tm *restrict result);"
.PP
.B time_t mktime(struct tm *tm);
.PP
.B "time_t mktime_z(timezone_t restrict zone,"
.B " struct tm *restrict tm);"
.PP
.B cc ... \*-ltz
.fi
.SH DESCRIPTION
.ie '\(en'' .ds en \-
.el .ds en \(en
.ie '\(lq'' .ds lq \&"\"
.el .ds lq \(lq\"
.ie '\(rq'' .ds rq \&"\"
.el .ds rq \(rq\"
.de q
\\$3\*(lq\\$1\*(rq\\$2
..
.I Ctime
converts a long integer, pointed to by
.IR clock ,
and returns a pointer to a
string of the form
.br
.ce
.eo
Thu Nov 24 18:22:48 1986\n\0
.br
.ec
Years requiring fewer than four characters are padded with leading zeroes.
For years longer than four characters, the string is of the form
.br
.ce
.eo
Thu Nov 24 18:22:48 81986\n\0
.ec
.br
with five spaces before the year.
These unusual formats are designed to make it less likely that older
software that expects exactly 26 bytes of output will mistakenly output
misleading values for out-of-range years.
.PP
The
.BI * clock
time stamp represents the time in seconds since 1970-01-01 00:00:00
Coordinated Universal Time (UTC).
The POSIX standard says that time stamps must be nonnegative
and must ignore leap seconds.
Many implementations extend POSIX by allowing negative time stamps,
and can therefore represent time stamps that predate the
introduction of UTC and are some other flavor of Universal Time (UT).
Some implementations support leap seconds, in contradiction to POSIX.
.PP
.I Localtime
and
.I gmtime
return pointers to
.q "tm"
structures, described below.
.I Localtime
corrects for the time zone and any time zone adjustments
(such as Daylight Saving Time in the United States).
After filling in the
.q "tm"
structure,
.I localtime
sets the
.BR tm_isdst 'th
element of
.B tzname
to a pointer to a string that's the time zone abbreviation to be used with
.IR localtime 's
return value.
.PP
.I Gmtime
converts to Coordinated Universal Time.
.PP
.I Asctime
converts a time value contained in a
.q "tm"
structure to a string,
as shown in the above example,
and returns a pointer to the string.
.PP
.I Mktime
converts the broken-down time,
expressed as local time,
in the structure pointed to by
.I tm
into a calendar time value with the same encoding as that of the values
returned by the
.I time
function.
The original values of the
.B tm_wday
and
.B tm_yday
components of the structure are ignored,
and the original values of the other components are not restricted
to their normal ranges.
(A positive or zero value for
.B tm_isdst
causes
.I mktime
to presume initially that summer time (for example, Daylight Saving Time
in the U.S.A.)
respectively,
is or is not in effect for the specified time.
A negative value for
.B tm_isdst
causes the
.I mktime
function to attempt to divine whether summer time is in effect
for the specified time; in this case it does not use a consistent
rule and may give a different answer when later
presented with the same argument.)
On successful completion, the values of the
.B tm_wday
and
.B tm_yday
components of the structure are set appropriately,
and the other components are set to represent the specified calendar time,
but with their values forced to their normal ranges; the final value of
.B tm_mday
is not set until
.B tm_mon
and
.B tm_year
are determined.
.I Mktime
returns the specified calendar time;
If the calendar time cannot be represented,
it returns \-1.
.PP
.I Difftime
returns the difference between two calendar times,
.RI ( time1
\-
.IR time0 ),
expressed in seconds.
.PP
.IR Ctime_r ,
.IR localtime_r ,
.IR gmtime_r ,
and
.I asctime_r
are like their unsuffixed counterparts, except that they accept an
additional argument specifying where to store the result if successful.
.PP
.IR Localtime_rz
and
.I mktime_z
are like their unsuffixed counterparts, except that they accept an
extra initial
.B zone
argument specifying the time zone to be used for conversion.
If
.B zone
is null, UTC is used; otherwise,
.B zone
should be have been allocated by
.I tzalloc
and should not be freed until after all uses (e.g., by calls to
.IR strftime )
of the filled-in
.B tm_zone
fields.
.PP
Declarations of all the functions and externals, and the
.q "tm"
structure,
are in the
.B <time.h>
header file.
The structure (of type)
.B struct tm
includes the following fields:
.RS
.PP
.nf
.ta .5i +\w'long tm_gmtoff;\0\0'u
int tm_sec; /\(** seconds (0\*(en60) \(**/
int tm_min; /\(** minutes (0\*(en59) \(**/
int tm_hour; /\(** hours (0\*(en23) \(**/
int tm_mday; /\(** day of month (1\*(en31) \(**/
int tm_mon; /\(** month of year (0\*(en11) \(**/
int tm_year; /\(** year \- 1900 \(**/
int tm_wday; /\(** day of week (Sunday = 0) \(**/
int tm_yday; /\(** day of year (0\*(en365) \(**/
int tm_isdst; /\(** is summer time in effect? \(**/
char \(**tm_zone; /\(** abbreviation of time zone name \(**/
long tm_gmtoff; /\(** offset from UT in seconds \(**/
.fi
.RE
.PP
The
.I tm_zone
and
.I tm_gmtoff
fields exist, and are filled in, only if arrangements to do
so were made when the library containing these functions was
created.
There is no guarantee that these fields will continue to exist
in this form in future releases of this code.
.PP
.I Tm_isdst
is non-zero if summer time is in effect.
.PP
.I Tm_gmtoff
is the offset (in seconds) of the time represented
from UT, with positive values indicating east
of the Prime Meridian.
The field's name is derived from Greenwich Mean Time, a precursor of UT.
.SH FILES
.ta \w'/usr/local/etc/zoneinfo/posixrules\0\0'u
/usr/local/etc/zoneinfo time zone information directory
.br
/usr/local/etc/zoneinfo/localtime local time zone file
.br
/usr/local/etc/zoneinfo/posixrules used with POSIX-style TZ's
.br
/usr/local/etc/zoneinfo/GMT for UTC leap seconds
.sp
If
.B /usr/local/etc/zoneinfo/GMT
is absent,
UTC leap seconds are loaded from
.BR /usr/local/etc/zoneinfo/posixrules .
.SH SEE ALSO
getenv(3),
newstrftime(3),
newtzset(3),
time(2),
tzfile(5)
.SH NOTES
The return values of
.IR asctime ,
.IR ctime ,
.IR gmtime ,
and
.I localtime
point to static data
overwritten by each call.
The
.B tm_zone
field of a returned
.B "struct tm"
points to a static array of characters, which
can be overwritten by later calls to
.IR tzset .
The remaining functions and data are thread-safe.
.PP
.IR Asctime ,
.IR asctime_r ,
.IR ctime ,
and
.I ctime_r
behave strangely for years before 1000 or after 9999.
The 1989 and 1999 editions of the C Standard say
that years from \-99 through 999 are converted without
extra spaces, but this conflicts with longstanding
tradition and with this implementation.
The 2011 edition says that the behavior
is undefined if the year is before 1000 or after 9999.
Traditional implementations of these two functions are
restricted to years in the range 1900 through 2099.
To avoid this portability mess, new programs should use
.I strftime
instead.
.\" This file is in the public domain, so clarified as of
.\" 2009-05-17 by Arthur David Olson.

230
doc/newstrftime.3 Normal file
View File

@ -0,0 +1,230 @@
.\" Based on the UCB file whose copyright information appears below.
.\" Copyright (c) 1989, 1991 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" This code is derived from software contributed to Berkeley by
.\" the American National Standards Committee X3, on Information
.\" Processing Systems.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the University of
.\" California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" from: @(#)strftime.3 5.12 (Berkeley) 6/29/91
.\" $Id: strftime.3,v 1.4 1993/12/15 20:33:00 jtc Exp $
.\"
.TH NEWSTRFTIME 3
.SH NAME
strftime \- format date and time
.SH SYNOPSIS
.nf
.ie \n(.g .ds - \f(CW-\fP
.el ds - \-
.B #include <time.h>
.PP
.B "size_t strftime(char *restrict buf, size_t maxsize,"
.B " char const *restrict format, struct tm const *restrict timeptr);"
.PP
.B cc ... \-ltz
.fi
.SH DESCRIPTION
.ie '\(en'' .ds en \-
.el .ds en \(en
The
.I strftime
function formats the information from
.I timeptr
into the buffer
.I buf
according to the string pointed to by
.IR format .
.PP
The
.I format
string consists of zero or more conversion specifications and
ordinary characters.
All ordinary characters are copied directly into the buffer.
A conversion specification consists of a percent sign
.Ql %
and one other character.
.PP
No more than
.I maxsize
characters are placed into the array.
If the total number of resulting characters, including the terminating
null character, is not more than
.IR maxsize ,
.I strftime
returns the number of characters in the array, not counting the
terminating null.
Otherwise, zero is returned.
.PP
Each conversion specification is replaced by the characters as
follows which are then copied into the buffer.
.TP
%A
is replaced by the locale's full weekday name.
.TP
%a
is replaced by the locale's abbreviated weekday name.
.TP
%B
is replaced by the locale's full month name.
.TP
%b or %h
is replaced by the locale's abbreviated month name.
.TP
%C
is replaced by the century (a year divided by 100 and truncated to an integer)
as a decimal number (00\*(en99).
.TP
%c
is replaced by the locale's appropriate date and time representation.
.TP
%D
is replaced by the date in the format %m/%d/%y.
.TP
%d
is replaced by the day of the month as a decimal number (01\*(en31).
.TP
%e
is replaced by the day of month as a decimal number (1\*(en31);
single digits are preceded by a blank.
.TP
%F
is replaced by the date in the format %Y\*-%m\*-%d.
.TP
%G
is replaced by the ISO 8601 year with century as a decimal number.
.TP
%g
is replaced by the ISO 8601 year without century as a decimal number (00\*(en99).
.TP
%H
is replaced by the hour (24-hour clock) as a decimal number (00\*(en23).
.TP
%I
is replaced by the hour (12-hour clock) as a decimal number (01\*(en12).
.TP
%j
is replaced by the day of the year as a decimal number (001\*(en366).
.TP
%k
is replaced by the hour (24-hour clock) as a decimal number (0\*(en23);
single digits are preceded by a blank.
.TP
%l
is replaced by the hour (12-hour clock) as a decimal number (1\*(en12);
single digits are preceded by a blank.
.TP
%M
is replaced by the minute as a decimal number (00\*(en59).
.TP
%m
is replaced by the month as a decimal number (01\*(en12).
.TP
%n
is replaced by a newline.
.TP
%p
is replaced by the locale's equivalent of either AM or PM.
.TP
%R
is replaced by the time in the format %H:%M.
.TP
%r
is replaced by the locale's representation of 12-hour clock time
using AM/PM notation.
.TP
%S
is replaced by the second as a decimal number (00\*(en60).
.TP
%s
is replaced by the number of seconds since the Epoch (see newctime(3)).
.TP
%T
is replaced by the time in the format %H:%M:%S.
.TP
%t
is replaced by a tab.
.TP
%U
is replaced by the week number of the year (Sunday as the first day of
the week) as a decimal number (00\*(en53).
.TP
%u
is replaced by the weekday (Monday as the first day of the week)
as a decimal number (1\*(en7).
.TP
%V
is replaced by the week number of the year (Monday as the first day of
the week) as a decimal number (01\*(en53). If the week containing January
1 has four or more days in the new year, then it is week 1; otherwise
it is week 53 of the previous year, and the next week is week 1.
.TP
%W
is replaced by the week number of the year (Monday as the first day of
the week) as a decimal number (00\*(en53).
.TP
%w
is replaced by the weekday (Sunday as the first day of the week)
as a decimal number (0\*(en6).
.TP
%X
is replaced by the locale's appropriate time representation.
.TP
%x
is replaced by the locale's appropriate date representation.
.TP
%Y
is replaced by the year with century as a decimal number.
.TP
%y
is replaced by the year without century as a decimal number (00\*(en99).
.TP
%Z
is replaced by the time zone name,
or by the empty string if this is not determinable.
.TP
%z
is replaced by the offset from the Prime Meridian
in the format +HHMM or \*-HHMM as appropriate,
with positive values representing locations east of Greenwich,
or by the empty string if this is not determinable.
.TP
%%
is replaced by a single %.
.TP
%+
is replaced by the date and time in date(1) format.
.SH SEE ALSO
date(1),
getenv(3),
newctime(3),
newtzset(3),
time(2),
tzfile(5)

326
doc/newtzset.3 Normal file
View File

@ -0,0 +1,326 @@
.TH NEWTZSET 3
.SH NAME
tzset \- initialize time conversion information
.SH SYNOPSIS
.nf
.ie \n(.g .ds - \f(CW-\fP
.el ds - \-
.B #include <time.h>
.PP
.B timezone_t tzalloc(char const *TZ);
.PP
.B void tzfree(timezone_t tz);
.PP
.B void tzset(void);
.PP
.B cc ... \*-ltz
.fi
.SH DESCRIPTION
.ie '\(en'' .ds en \-
.el .ds en \(en
.ie '\(lq'' .ds lq \&"\"
.el .ds lq \(lq\"
.ie '\(rq'' .ds rq \&"\"
.el .ds rq \(rq\"
.de q
\\$3\*(lq\\$1\*(rq\\$2
..
.I Tzalloc
allocates and returns a time zone object described by
.BR TZ .
If
.B TZ
is not a valid time zone description, or if the object cannot be allocated,
.I tzalloc
returns a null pointer and sets
.BR errno .
.PP
.I Tzfree
frees a time zone object
.BR tz ,
which should have been successfully allocated by
.IR tzalloc .
This invalidates any
.B tm_zone
pointers that
.B tz
was used to set.
.PP
.I Tzset
acts like
.BR tzalloc(getenv("TZ")) ,
except it saves any resulting time zone object into internal
storage that is accessed by
.IR localtime ,
.IR localtime_r ,
and
.IR mktime .
The anonymous shared time zone object is freed by the next call to
.IR tzset .
If the implied call to
.B tzalloc
fails,
.I tzset
falls back on UTC.
.PP
If
.B TZ
is null, the best available approximation to local wall
clock time, as specified by the
.IR tzfile (5)-format
file
.B localtime
in the system time conversion information directory, is used.
If
.B TZ
is the empty string,
Universal Time (UT) is used, with the abbreviation "UTC"
and without leap second correction; please see
.IR newctime (3)
for more about UT, UTC, and leap seconds. If
.B TZ
is nonnull and nonempty:
.IP
if the value begins with a colon, it is used as a pathname of a file
from which to read the time conversion information;
.IP
if the value does not begin with a colon, it is first used as the
pathname of a file from which to read the time conversion information,
and, if that file cannot be read, is used directly as a specification of
the time conversion information.
.PP
When
.B TZ
is used as a pathname, if it begins with a slash,
it is used as an absolute pathname; otherwise,
it is used as a pathname relative to a system time conversion information
directory.
The file must be in the format specified in
.IR tzfile (5).
.PP
When
.B TZ
is used directly as a specification of the time conversion information,
it must have the following syntax (spaces inserted for clarity):
.IP
\fIstd\|offset\fR[\fIdst\fR[\fIoffset\fR][\fB,\fIrule\fR]]
.PP
Where:
.RS
.TP 15
.IR std " and " dst
Three or more bytes that are the designation for the standard
.RI ( std )
or summer
.RI ( dst )
time zone. Only
.I std
is required; if
.I 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
.RB ( : ),
digits, comma
.RB ( , ),
ASCII minus
.RB ( \*- ),
ASCII plus
.RB ( + ),
and NUL bytes are allowed.
.TP
.I offset
Indicates the value one must add to the local time to arrive at
Coordinated Universal Time. The
.I offset
has the form:
.RS
.IP
\fIhh\fR[\fB:\fImm\fR[\fB:\fIss\fR]]
.RE
.IP
The minutes
.RI ( mm )
and seconds
.RI ( ss )
are optional. The hour
.RI ( hh )
is required and may be a single digit. The
.I offset
following
.I std
is required. If no
.I offset
follows
.IR 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) \*(en if present \*(en between zero and 59. If preceded by a
.q "\*-" ,
the time zone shall be east of the Prime Meridian; otherwise it shall be
west (which may be indicated by an optional preceding
.q "+" .
.TP
.I rule
Indicates when to change to and back from summer time. The
.I rule
has the form:
.RS
.IP
\fIdate\fB/\fItime\fB,\fIdate\fB/\fItime\fR
.RE
.IP
where the first
.I date
describes when the change from standard to summer time occurs and the
second
.I date
describes when the change back happens. Each
.I time
field describes when, in current local time, the change to the other
time is made.
As an extension to POSIX, daylight saving is assumed to be in effect
all year if it begins January 1 at 00:00 and ends December 31 at
24:00 plus the difference between daylight saving and standard time,
leaving no room for standard time in the calendar.
.IP
The format of
.I date
is one of the following:
.RS
.TP 10
.BI J n
The Julian day
.I n
.RI "(1\ \(<=" "\ n\ " "\(<=\ 365).
Leap days are not counted; that is, in all years \*(en including leap
years \*(en February 28 is day 59 and March 1 is day 60. It is
impossible to explicitly refer to the occasional February 29.
.TP
.I n
The zero-based Julian day
.RI "(0\ \(<=" "\ n\ " "\(<=\ 365).
Leap days are counted, and it is possible to refer to February 29.
.TP
.BI M m . n . d
The
.IR d' th
day
.RI "(0\ \(<=" "\ d\ " "\(<=\ 6)
of week
.I n
of month
.I m
of the year
.RI "(1\ \(<=" "\ n\ " "\(<=\ 5,
.RI "1\ \(<=" "\ m\ " "\(<=\ 12,
where week 5 means
.q "the last \fId\fP day in month \fIm\fP"
which may occur in either the fourth or the fifth week). Week 1 is the
first week in which the
.IR d' th
day occurs. Day zero is Sunday.
.RE
.IP "" 15
The
.I time
has the same format as
.I offset
except that POSIX does not allow a leading sign (\c
.q "\*-"
or
.q "+" ).
As an extension to POSIX, the hours part of
.I time
can range from \-167 through 167; this allows for unusual rules such
as
.q "the Saturday before the first Sunday of March" .
The default, if
.I time
is not given, is
.BR 02:00:00 .
.RE
.LP
Here are some examples of
.B TZ
values that directly specify the time zone rules; they use some of the
extensions to POSIX.
.TP
.B EST5
stands for US Eastern Standard
Time (EST), 5 hours behind UTC, without daylight saving.
.TP
.B FJT\*-12FJST,M11.1.0,M1.3.4/75
stands for Fiji Time (FJT) and Fiji Summer Time (FJST), 12 hours ahead
of UTC, springing forward on November's first Sunday at 02:00, and
falling back on January's third Thursday at 75:00 (i.e., 03:00 on the
first Sunday on or after January 18).
.TP
.B IST\*-2IDT,M3.4.4/26,M10.5.0
stands for Israel Standard Time (IST) and Israel Daylight Time (IDT),
2 hours ahead of UTC, springing forward on March's fourth
Thursday at 26:00 (i.e., 02:00 on the first Friday on or after March
23), and falling back on October's last Sunday at 02:00.
.TP
.B WART4WARST,J1/0,J365/25
stands for Western Argentina Summer Time (WARST), 3 hours behind UTC.
There is a dummy fall-back transition on December 31 at 25:00 daylight
saving time (i.e., 24:00 standard time, equivalent to January 1 at
00:00 standard time), and a simultaneous spring-forward transition on
January 1 at 00:00 standard time, so daylight saving time is in effect
all year and the initial
.B WART
is a placeholder.
.TP
.B WGT3WGST,M3.5.0/\*-2,M10.5.0/\*-1
stands for Western Greenland Time (WGT) and Western Greenland Summer
Time (WGST), 3 hours behind UTC, where clocks follow the EU rules of
springing forward on March's last Sunday at 01:00 UTC (\-02:00 local
time) and falling back on October's last Sunday at 01:00 UTC
(\-01:00 local time).
.PP
If no
.I rule
is present in
.BR TZ ,
the rules specified
by the
.IR tzfile (5)-format
file
.B 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
.I offset
values in
.BR TZ .
.PP
For compatibility with System V Release 3.1, a semicolon
.RB ( ; )
may be used to separate the
.I rule
from the rest of the specification.
.SH FILES
.ta \w'/usr/local/etc/zoneinfo/posixrules\0\0'u
/usr/local/etc/zoneinfo time zone information directory
.br
/usr/local/etc/zoneinfo/localtime local time zone file
.br
/usr/local/etc/zoneinfo/posixrules used with POSIX-style TZ's
.br
/usr/local/etc/zoneinfo/GMT for UTC leap seconds
.sp
If
.B /usr/local/etc/zoneinfo/GMT
is absent,
UTC leap seconds are loaded from
.BR /usr/local/etc/zoneinfo/posixrules .
.SH SEE ALSO
getenv(3),
newctime(3),
newstrftime(3),
time(2),
tzfile(5)
.\" This file is in the public domain, so clarified as of
.\" 2009-05-17 by Arthur David Olson.

156
doc/tzfile.5 Normal file
View File

@ -0,0 +1,156 @@
.TH TZFILE 5
.SH NAME
tzfile \- time zone information
.SH SYNOPSIS
.B
#include <tzfile.h>
.SH DESCRIPTION
The time zone information files used by
.IR tzset (3)
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 2013, either an ASCII NUL, or '2', or '3')
followed by fifteen bytes containing zeroes reserved for future use,
followed by six four-byte integer values
written in a standard byte order
(the high-order byte of the value is written first).
These values are,
in order:
.TP
.I tzh_ttisgmtcnt
The number of UT/local indicators stored in the file.
.TP
.I tzh_ttisstdcnt
The number of standard/wall indicators stored in the file.
.TP
.I tzh_leapcnt
The number of leap seconds for which data entries are stored in the file.
.TP
.I tzh_timecnt
The number of transition times for which data entries are stored
in the file.
.TP
.I tzh_typecnt
The number of local time types for which data entries are stored
in the file (must not be zero).
.TP
.I tzh_charcnt
The number of characters of time zone abbreviation strings
stored in the file.
.PP
The above header is followed by
.I tzh_timecnt
four-byte signed integer values sorted in ascending order.
These values are written in standard byte order.
Each is used as a transition time (as returned by
.IR time (2))
at which the rules for computing local time change.
Next come
.I tzh_timecnt
one-byte unsigned integer values;
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
.I ttinfo
structures (with
.I tzh_typecnt
entries) that appears next in the file;
these structures are defined as follows:
.in +.5i
.sp
.nf
.ta .5i +\w'unsigned char\0\0'u
struct ttinfo {
int32_t tt_gmtoff;
unsigned char tt_isdst;
unsigned char tt_abbrind;
};
.in -.5i
.fi
.sp
Each structure is written as a four-byte signed integer value for
.IR tt_gmtoff ,
in a standard byte order, followed by a one-byte value for
.I tt_isdst
and a one-byte value for
.IR tt_abbrind .
In each structure,
.I tt_gmtoff
gives the number of seconds to be added to UT,
.I tt_isdst
tells whether
.I tm_isdst
should be set by
.I localtime (3)
and
.I tt_abbrind
serves as an index into the array of time zone abbreviation characters
that follow the
.I ttinfo
structure(s) in the file.
.PP
Then there are
.I tzh_leapcnt
pairs of four-byte values, written in standard byte order;
the first value of each pair gives the time
(as returned by
.IR time(2))
at which a leap second occurs;
the second gives the
.I total
number of leap seconds to be applied after the given time.
The pairs of values are sorted in ascending order by time.
.PP
Then there are
.I 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.
.PP
Finally there are
.I tzh_ttisgmtcnt
UT/local indicators, each stored as a one-byte value;
they tell whether the transition times associated with local time types
were specified as UT or local time,
and are used when a time zone file is used in handling POSIX-style
time zone environment variables.
.PP
.I Localtime
uses the first standard-time
.I ttinfo
structure in the file
(or simply the first
.I ttinfo
structure in the absence of a standard-time structure)
if either
.I tzh_timecnt
is zero or the time argument is less than the first transition time recorded
in the file.
.PP
For version-2-format time zone files,
the above header and data are 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).
.PP
For version-3-format time zone files, the POSIX-TZ-style string may
use two minor extensions to the POSIX TZ format, as described in
.IR newtzset (3).
First, the hours part of its transition times may be signed and range from
\-167 through 167 instead of the POSIX-required unsigned values
from 0 through 24. Second, DST is in effect all year if it starts
January 1 at 00:00 and ends December 31 at 24:00 plus the difference
between daylight saving and standard time.
.PP
Future changes to the format may append more data.
.SH SEE ALSO
newctime(3), newtzset(3), zdump(8), zic(8)
.\" This file is in the public domain, so clarified as of
.\" 1996-06-05 by Arthur David Olson.

92
doc/zdump.8 Normal file
View File

@ -0,0 +1,92 @@
.TH ZDUMP 8
.SH NAME
zdump \- time zone dumper
.SH SYNOPSIS
.B zdump
[
.I option
\&... ] [
.I zonename
\&... ]
.SH DESCRIPTION
.ie \n(.g .ds - \f(CW-\fP
.el ds - \-
.I Zdump
prints the current time in each
.I zonename
named on the command line.
.PP
These options are available:
.TP
.BI "\*-\*-version"
Output version information and exit.
.TP
.B \*-v
For each
.I zonename
on the command line,
print the time at the lowest possible time value,
the time one day after the lowest possible time value,
the times both one second before and exactly at
each detected time discontinuity,
the time at one day less than the highest possible time value,
and the time at the highest possible time value.
Each line is followed by
.BI isdst= D
where
.I D
is positive, zero, or negative depending on whether
the given time is daylight saving time, standard time,
or an unknown time type, respectively.
Each line is also followed by
.BI gmtoff= N
if the given local time is known to be
.I N
seconds east of Greenwich.
.TP
.B \*-V
Like
.BR \*-v ,
except omit the times relative to the extreme time values.
This generates output that is easier to compare to that of
implementations with different time representations.
.TP
.BI "\*-c " [loyear,]hiyear
Cut off verbose output at the given year(s).
Cutoff times are computed using the proleptic Gregorian calendar with year 0
and with Universal Time (UT) ignoring leap seconds.
The lower bound is exclusive and the upper is inclusive; for example, a
.I loyear
of 1970 excludes a transition occurring at 1970-01-01 00:00:00 UTC but a
.I hiyear
of 1970 includes the transition.
The default cutoff is
.BR \*-500,2500 .
.TP
.BI "\*-t " [lotime,]hitime
Cut off verbose output at the given time(s),
given in decimal seconds since 1970-01-01 00:00:00
Coordinated Universal Time (UTC).
The
.I zonename
determines whether the count includes leap seconds.
As with
.BR \*-c ,
the cutoff's lower bound is exclusive and its upper bound is inclusive.
.SH LIMITATIONS
Time discontinuities are found by sampling the results returned by localtime
at twelve-hour intervals.
This works in all real-world cases;
one can construct artificial time zones for which this fails.
.PP
In the output, "UT" denotes the value returned by
.IR gmtime (3),
which uses UTC for modern time stamps and some other UT flavor for
time stamps that predate the introduction of UTC.
No attempt is currently made to have the output use "UTC" for newer
and "UT" for older time stamps,
partly because the exact date of the introduction of UTC is problematic.
.SH "SEE ALSO"
newctime(3), tzfile(5), zic(8)
.\" This file is in the public domain, so clarified as of
.\" 2009-05-17 by Arthur David Olson.

563
doc/zic.8 Normal file
View File

@ -0,0 +1,563 @@
.TH ZIC 8
.SH NAME
zic \- time zone compiler
.SH SYNOPSIS
.B zic
[
.I option
\&... ] [
.I filename
\&... ]
.SH DESCRIPTION
.ie '\(lq'' .ds lq \&"\"
.el .ds lq \(lq\"
.ie '\(rq'' .ds rq \&"\"
.el .ds rq \(rq\"
.de q
\\$3\*(lq\\$1\*(rq\\$2
..
.ie '\(la'' .ds < <
.el .ds < \(la
.ie '\(ra'' .ds > >
.el .ds > \(ra
.ie \n(.g \{\
. ds : \:
. ds - \f(CW-\fP
.\}
.el \{\
. ds :
. el ds - \-
.\}
.I Zic
reads text from the file(s) named on the command line
and creates the time conversion information files specified in this input.
If a
.I filename
is
.q "\*-" ,
the standard input is read.
.PP
These options are available:
.TP
.BI "\*-\*-version"
Output version information and exit.
.TP
.BI "\*-d " directory
Create time conversion information files in the named directory rather than
in the standard directory named below.
.TP
.BI "\*-l " timezone
Use the given time zone as local time.
.I Zic
will act as if the input contained a link line of the form
.sp
.ti +.5i
Link \fItimezone\fP localtime
.TP
.BI "\*-p " timezone
Use the given time zone's rules when handling POSIX-format
time zone environment variables.
.I Zic
will act as if the input contained a link line of the form
.sp
.ti +.5i
Link \fItimezone\fP posixrules
.TP
.BI "\*-L " leapsecondfilename
Read leap second information from the file with the given name.
If this option is not used,
no leap second information appears in output files.
.TP
.B \*-v
Be more verbose, and complain about the following situations:
.RS
.PP
The input specifies a link to a link.
.PP
A year that appears in a data file is outside the range
of years representable by
.IR time (2)
values.
.PP
A time of 24:00 or more appears in the input.
Pre-1998 versions of
.I zic
prohibit 24:00, and pre-2007 versions prohibit times greater than 24:00.
.PP
A rule goes past the start or end of the month.
Pre-2004 versions of
.I zic
prohibit this.
.PP
The output file does not contain all the information about the
long-term future of a zone, because the future cannot be summarized as
an extended POSIX TZ string. For example, as of 2013 this problem
occurs for Iran's daylight-saving rules for the predicted future, as
these rules are based on the Iranian calendar, which cannot be
represented.
.PP
The output contains data that may not be handled properly by client
code designed for older
.I zic
output formats. These compatibility issues affect only time stamps
before 1970 or after the start of 2038.
.PP
A time zone abbreviation has fewer than 3 characters.
POSIX requires at least 3.
.PP
An output file name contains a byte that is not an ASCII letter,
.q "\*-" ,
.q "/" ,
or
.q "_" ;
or it contains a file name component that contains more than 14 bytes
or that starts with
.q "\*-" .
.RE
.TP
.B \*-s
Limit time values stored in output files to values that are the same
whether they're taken to be signed or unsigned.
You can use this option to generate SVVS-compatible files.
.TP
.BI "\*-y " command
Use the given
.I command
rather than
.B yearistype
when checking year types (see below).
.PP
Input files should be text files, that is, they should be a series of
zero or more lines, each ending in a newline byte and containing at
most 511 bytes, and without any NUL bytes. The input text's encoding
is typically UTF-8 or ASCII; it should have a unibyte representation
for the POSIX Portable Character Set (PPCS)
\*<http://pubs\*:.opengroup\*:.org/\*:onlinepubs/\*:9699919799/\*:basedefs/\*:V1_chap06\*:.html\*>
and the encoding's non-unibyte characters should consist entirely of
non-PPCS bytes. Non-PPCS characters typically occur only in comments:
although output file names and time zone abbreviations can contain
nearly any character, other software will work better if these are
limited to the restricted syntax described under the
.B \*-v
option.
.PP
Input lines are made up of fields.
Fields are separated from one another by one or more white space characters.
The white space characters are space, form feed, carriage return, newline,
tab, and vertical tab.
Leading and trailing white space on input lines is ignored.
An unquoted sharp character (#) in the input introduces a comment which extends
to the end of the line the sharp character appears on.
White space characters and sharp characters may be enclosed in double quotes
(") if they're to be used as part of a field.
Any line that is blank (after comment stripping) is ignored.
Non-blank lines are expected to be of one of three types:
rule lines, zone lines, and link lines.
.PP
Names (such as month names) must be in English and are case insensitive.
Abbreviations, if used, must be unambiguous in context.
.PP
A rule line has the form
.nf
.ti +.5i
.ta \w'Rule\0\0'u +\w'NAME\0\0'u +\w'FROM\0\0'u +\w'1973\0\0'u +\w'TYPE\0\0'u +\w'Apr\0\0'u +\w'lastSun\0\0'u +\w'2:00\0\0'u +\w'SAVE\0\0'u
.sp
Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
.sp
For example:
.ti +.5i
.sp
Rule US 1967 1973 \*- Apr lastSun 2:00 1:00 D
.sp
.fi
The fields that make up a rule line are:
.TP "\w'LETTER/S'u"
.B NAME
Gives the (arbitrary) name of the set of rules this rule is part of.
.TP
.B FROM
Gives the first year in which the rule applies.
Any integer year can be supplied; the proleptic Gregorian calendar is assumed.
The word
.B minimum
(or an abbreviation) means the minimum year representable as an integer.
The word
.B maximum
(or an abbreviation) means the maximum year representable as an integer.
Rules can describe times that are not representable as time values,
with the unrepresentable times ignored; this allows rules to be portable
among hosts with differing time value types.
.TP
.B TO
Gives the final year in which the rule applies.
In addition to
.B minimum
and
.B maximum
(as above),
the word
.B only
(or an abbreviation)
may be used to repeat the value of the
.B FROM
field.
.TP
.B TYPE
Gives the type of year in which the rule applies.
If
.B TYPE
is
.q \*-
then the rule applies in all years between
.B FROM
and
.B TO
inclusive.
If
.B TYPE
is something else, then
.I zic
executes the command
.ti +.5i
\fByearistype\fP \fIyear\fP \fItype\fP
.br
to check the type of a year:
an exit status of zero is taken to mean that the year is of the given type;
an exit status of one is taken to mean that the year is not of the given type.
.TP
.B IN
Names the month in which the rule takes effect.
Month names may be abbreviated.
.TP
.B ON
Gives the day on which the rule takes effect.
Recognized forms include:
.nf
.in +.5i
.sp
.ta \w'Sun<=25\0\0'u
5 the fifth of the month
lastSun the last Sunday in the month
lastMon the last Monday in the month
Sun>=8 first Sunday on or after the eighth
Sun<=25 last Sunday on or before the 25th
.fi
.in -.5i
.sp
Names of days of the week may be abbreviated or spelled out in full.
Note that there must be no spaces within the
.B ON
field.
.TP
.B AT
Gives the time of day at which the rule takes effect.
Recognized forms include:
.nf
.in +.5i
.sp
.ta \w'1:28:13\0\0'u
2 time in hours
2:00 time in hours and minutes
15:00 24-hour format time (for times after noon)
1:28:14 time in hours, minutes, and seconds
\*- equivalent to 0
.fi
.in -.5i
.sp
where hour 0 is midnight at the start of the day,
and hour 24 is midnight at the end of the day.
Any of these forms may be followed by the letter
.B w
if the given time is local
.q "wall clock"
time,
.B s
if the given time is local
.q "standard"
time, or
.B u
(or
.B g
or
.BR z )
if the given time is universal time;
in the absence of an indicator,
wall clock time is assumed.
The intent is that a rule line describes the instants when a
clock/calendar set to the type of time specified in the
.B AT
field would show the specified date and time of day.
.TP
.B SAVE
Gives the amount of time to be added to local standard time when the rule is in
effect.
This field has the same format as the
.B AT
field
(although, of course, the
.B w
and
.B s
suffixes are not used).
.TP
.B LETTER/S
Gives the
.q "variable part"
(for example, the
.q "S"
or
.q "D"
in
.q "EST"
or
.q "EDT" )
of time zone abbreviations to be used when this rule is in effect.
If this field is
.q \*- ,
the variable part is null.
.PP
A zone line has the form
.sp
.nf
.ti +.5i
.ta \w'Zone\0\0'u +\w'Australia/Adelaide\0\0'u +\w'GMTOFF\0\0'u +\w'RULES/SAVE\0\0'u +\w'FORMAT\0\0'u
Zone NAME GMTOFF RULES/SAVE FORMAT [UNTILYEAR [MONTH [DAY [TIME]]]]
.sp
For example:
.sp
.ti +.5i
Zone Australia/Adelaide 9:30 Aus AC%sT 1971 Oct 31 2:00
.sp
.fi
The fields that make up a zone line are:
.TP "\w'GMTOFF'u"
.B NAME
The name of the time zone.
This is the name used in creating the time conversion information file for the
zone.
It should not contain a file name component
.q ".\&"
or
.q ".." ;
a file name component is a maximal substring that does not contain
.q "/" .
.TP
.B GMTOFF
The amount of time to add to UT to get standard time in this zone.
This field has the same format as the
.B AT
and
.B SAVE
fields of rule lines;
begin the field with a minus sign if time must be subtracted from UT.
.TP
.B RULES/SAVE
The name of the rule(s) that apply in the time zone or,
alternately, an amount of time to add to local standard time.
If this field is
.B \*-
then standard time always applies in the time zone.
.TP
.B FORMAT
The format for time zone abbreviations in this time zone.
The pair of characters
.B %s
is used to show where the
.q "variable part"
of the time zone abbreviation goes.
Alternately,
a slash (/)
separates standard and daylight abbreviations.
.TP
.B UNTILYEAR [MONTH [DAY [TIME]]]
The time at which the UT offset or the rule(s) change for a location.
It is specified as a year, a month, a day, and a time of day.
If this is specified,
the time zone information is generated from the given UT offset
and rule change until the time specified, which is interpreted using
the rules in effect just before the transition.
The month, day, and time of day have the same format as the IN, ON, and AT
fields of a rule; trailing fields can be omitted, and default to the
earliest possible value for the missing fields.
.IP
The next line must be a
.q "continuation"
line; this has the same form as a zone line except that the
string
.q "Zone"
and the name are omitted, as the continuation line will
place information starting at the time specified as the
.q "until"
information in the previous line in the file used by the previous line.
Continuation lines may contain
.q "until"
information, just as zone lines do, indicating that the next line is a further
continuation.
.PP
A link line has the form
.sp
.nf
.ti +.5i
.ta \w'Link\0\0'u +\w'Europe/Istanbul\0\0'u
Link TARGET LINK-NAME
.sp
For example:
.sp
.ti +.5i
Link Europe/Istanbul Asia/Istanbul
.sp
.fi
The
.B TARGET
field should appear as the
.B NAME
field in some zone line.
The
.B LINK-NAME
field is used as an alternate name for that zone;
it has the same syntax as a zone line's
.B NAME
field.
.PP
Except for continuation lines,
lines may appear in any order in the input.
However, the behavior is unspecified if multiple zone or link lines
define the same name, or if the source of one link line is the target
of another.
.PP
Lines in the file that describes leap seconds have the following form:
.nf
.ti +.5i
.ta \w'Leap\0\0'u +\w'YEAR\0\0'u +\w'MONTH\0\0'u +\w'DAY\0\0'u +\w'HH:MM:SS\0\0'u +\w'CORR\0\0'u
.sp
Leap YEAR MONTH DAY HH:MM:SS CORR R/S
.sp
For example:
.ti +.5i
.sp
Leap 1974 Dec 31 23:59:60 + S
.sp
.fi
The
.BR YEAR ,
.BR MONTH ,
.BR DAY ,
and
.B HH:MM:SS
fields tell when the leap second happened.
The
.B CORR
field
should be
.q "+"
if a second was added
or
.q "\*-"
if a second was skipped.
.\" There's no need to document the following, since it's impossible for more
.\" than one leap second to be inserted or deleted at a time.
.\" The C Standard is in error in suggesting the possibility.
.\" See Terry J Quinn, The BIPM and the accurate measure of time,
.\" Proc IEEE 79, 7 (July 1991), 894-905.
.\" or
.\" .q ++
.\" if two seconds were added
.\" or
.\" .q --
.\" if two seconds were skipped.
The
.B R/S
field
should be (an abbreviation of)
.q "Stationary"
if the leap second time given by the other fields should be interpreted as UTC
or
(an abbreviation of)
.q "Rolling"
if the leap second time given by the other fields should be interpreted as
local wall clock time.
.SH "EXTENDED EXAMPLE"
Here is an extended example of
.I zic
input, intended to illustrate many of its features.
.br
.ne 22
.nf
.in +2m
.ta \w'# Rule\0\0'u +\w'NAME\0\0'u +\w'FROM\0\0'u +\w'1973\0\0'u +\w'TYPE\0\0'u +\w'Apr\0\0'u +\w'lastSun\0\0'u +\w'2:00\0\0'u +\w'SAVE\0\0'u
.sp
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Swiss 1941 1942 \*- May Mon>=1 1:00 1:00 S
Rule Swiss 1941 1942 \*- Oct Mon>=1 2:00 0 \*-
.sp .5
Rule EU 1977 1980 \*- Apr Sun>=1 1:00u 1:00 S
Rule EU 1977 only \*- Sep lastSun 1:00u 0 \*-
Rule EU 1978 only \*- Oct 1 1:00u 0 \*-
Rule EU 1979 1995 \*- Sep lastSun 1:00u 0 \*-
Rule EU 1981 max \*- Mar lastSun 1:00u 1:00 S
Rule EU 1996 max \*- Oct lastSun 1:00u 0 \*-
.sp
.ta \w'# Zone\0\0'u +\w'Europe/Zurich\0\0'u +\w'GMTOFF\0\0'u +\w'RULES/SAVE\0\0'u +\w'FORMAT\0\0'u
# Zone NAME GMTOFF RULES/SAVE FORMAT UNTIL
Zone Europe/Zurich 0:34:08 \*- LMT 1853 Jul 16
0:29:46 \*- BMT 1894 Jun
1:00 Swiss CE%sT 1981
1:00 EU CE%sT
.sp
Link Europe/Zurich Switzerland
.sp
.in
.fi
In this example, the zone is named Europe/Zurich but it has an alias
as Switzerland. This example says that Zurich was 34 minutes and 8
seconds west of UT until 1853-07-16 at 00:00, when the legal offset
was changed to 7\(de\|26\(fm\|22.50\(sd; although this works out to
0:29:45.50, the input format cannot represent fractional seconds so it
is rounded here. After 1894-06-01 at 00:00 Swiss daylight saving rules
(defined with lines beginning with "Rule Swiss") apply, and the UT offset
became one hour. From 1981 to the present, EU daylight saving rules have
applied, and the UTC offset has remained at one hour.
.PP
In 1941 and 1942, daylight saving time applied from the first Monday
in May at 01:00 to the first Monday in October at 02:00.
The pre-1981 EU daylight-saving rules have no effect
here, but are included for completeness. Since 1981, daylight
saving has begun on the last Sunday in March at 01:00 UTC.
Until 1995 it ended the last Sunday in September at 01:00 UTC,
but this changed to the last Sunday in October starting in 1996.
.PP
For purposes of
display, "LMT" and "BMT" were initially used, respectively. Since
Swiss rules and later EU rules were applied, the display name for the
time zone has been CET for standard time and CEST for daylight saving
time.
.SH NOTES
For areas with more than two types of local time,
you may need to use local standard time in the
.B AT
field of the earliest transition time's rule to ensure that
the earliest transition time recorded in the compiled file is correct.
.PP
If,
for a particular zone,
a clock advance caused by the start of daylight saving
coincides with and is equal to
a clock retreat caused by a change in UT offset,
.IR zic
produces a single transition to daylight saving at the new UT offset
(without any change in wall clock time).
To get separate transitions
use multiple zone continuation lines
specifying transition instants using universal time.
.PP
Time stamps well before the Big Bang are silently omitted from the output.
This works around bugs in software that mishandles large negative time
stamps. Call it sour grapes, but pre-Big-Bang time stamps are
physically suspect anyway. The pre-Big-Bang cutoff time is
approximate and may change in future versions.
.SH FILE
/usr/local/etc/zoneinfo standard directory used for created files
.SH "SEE ALSO"
newctime(3), tzfile(5), zdump(8)
.\" This file is in the public domain, so clarified as of
.\" 2009-05-17 by Arthur David Olson.