Hi Paul, On 06/27/2018 09:52 PM, Paul Eggert wrote: > Make zic.8 a copy of the upstream tzdb version, except that > the tzdb version's first line is replaced by man-pages > boilerplate, and omit features introduced after 2017b > (the most recent merge to glibc). > > This has the following effect: > > Document --version, --help. > > Document new -v warnings. > > Remove -y. > > Document that input should be text files, and similar restrictions on > names. > > Document negative DST. > > Document what is meant by "white space". > > Do some minor reformatting. > > Use .B for as-is keywords, like commands. > > New section "EXTENDED EXAMPLE". > > Omit some changes that were made on the man-pages side, notably by > changing some "timezone"s back to the preferred-upstream "time zone" > when talking about traditional time zones as opposed to POSIX timezone > settings. Also, fix some formatting glitches. Patch applied. Thanks! Cheers, Michael > --- > man8/zic.8 | 516 +++++++++++++++++++++++++++++++++++++---------------- > 1 file changed, 358 insertions(+), 158 deletions(-) > > diff --git a/man8/zic.8 b/man8/zic.8 > index d56cad870..256a2ac77 100644 > --- a/man8/zic.8 > +++ b/man8/zic.8 > @@ -6,20 +6,32 @@ > .SH NAME > zic \- timezone compiler > .SH SYNOPSIS > -.nf > -.BR zic " [" \-v "] [" \-d " \fIdirectory\fP] [" \-l " \fIlocaltime\fP] [" \ > -\-p " \fIposixrules\fP]" > -.RB " [" \-L " \fIleapsecondfilename\fP] [" \-s "] [" \-y \ > -" \fIcommand\fP] [\fIfilename\fP...] > -.fi > +.B zic > +[ > +.I option > +\&... ] [ > +.I filename > +\&... ] > .SH DESCRIPTION > -.if t .ds lq `` > -.if t .ds rq '' > -.if n .ds lq \&"\" > -.if n .ds rq \&"\" > +.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 : > +. ds - \- > +.\} > The > .B zic > program reads text from the file(s) named on the command line > @@ -27,57 +39,116 @@ and creates the time conversion information files specified in this input. > If a > .I filename > is > -.BR \- , > +.q "\*-" , > standard input is read. > -.PP > -These options are available: > +.SH OPTIONS > .TP > -.BI "\-d " directory > +.B "\*-\*-version" > +Output version information and exit. > +.TP > +.B \*-\*-help > +Output short usage message 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 timezone as local time. > +.BI "\*-l " timezone > +Use > +.I timezone > +as local time. > .B zic > will act as if the input contained a link line of the form > -.PP > +.sp > .ti +.5i > Link \fItimezone\fP localtime > .TP > -.BI "\-p " timezone > -Use the given timezone's rules when handling POSIX-format > +.BI "\*-p " timezone > +Use > +.IR timezone 's > +rules when handling POSIX-format > timezone environment variables. > .B zic > will act as if the input contained a link line of the form > -.PP > +.sp > .ti +.5i > Link \fItimezone\fP posixrules > .TP > -.BI "\-L " leapsecondfilename > +.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 > -Complain if a year that appears in a data file is outside the range > +.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 > .BR time (2) > values. > +.PP > +A time of 24:00 or more appears in the input. > +Pre-1998 versions of > +.B 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 > +.B zic > +prohibit this. > +.PP > +The output file does not contain all the information about the > +long-term future of a timezone, 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 > +.B zic > +output formats. These compatibility issues affect only timestamps > +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 > +.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 any number of white space characters. > +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. > @@ -87,33 +158,53 @@ Any line that is blank (after comment stripping) is ignored. > Nonblank lines are expected to be of one of three types: > rule lines, zone lines, and link lines. > .PP > +Names must be in English and are case insensitive. > +They appear in several contexts, and include month and weekday names > +and keywords such as > +.BR "maximum" , > +.BR "only" , > +.BR "Rolling" , > +and > +.BR "Zone" . > +A name can be abbreviated by omitting all but an initial prefix; any > +abbreviation 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 > -.PP > +.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:00w\0\0'u +\w'1:00d\0\0'u > +.sp > Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S > -.PP > +.sp > For example: > .ti +.5i > -.PP > -Rule US 1967 1973 \- Apr lastSun 2:00 1:00 D > -.PP > +.sp > +Rule US 1967 1973 \*- Apr lastSun 2:00w 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. > +Gives the name of the rule set that contains this line. > +The name must start with a character that is neither > +an ASCII digit nor > +.q \*- > +nor > +.q + . > +To allow for future extensions, > +an unquoted name should not contain characters from the set > +.q !$%&'()*,/:;<=>?@[\e]^`{|}~ . > .TP > .B FROM > Gives the first year in which the rule applies. > -Any integer year can be supplied; the Gregorian calendar is assumed. > +Any signed integer year can be supplied; the proleptic Gregorian calendar > +is assumed, with year 0 preceding year 1. > The word > -.I minimum > -(or an abbreviation) means the minimum year representable as an integer. > +.B minimum > +(or an abbreviation) means the indefinite past. > The word > -.I maximum > -(or an abbreviation) means the maximum year representable as an integer. > +.B maximum > +(or an abbreviation) means the indefinite future. > 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. > @@ -121,41 +212,23 @@ among hosts with differing time value types. > .B TO > Gives the final year in which the rule applies. > In addition to > -.I minimum > +.B minimum > and > -.I maximum > +.B maximum > (as above), > the word > -.I only > +.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 > -.BR \- , > -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 > -.B yearistype > -.I year > -.I type > -.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. > +should be > +.q \*- > +and is present for compatibility with older versions of > +.B zic > +in which it could contain year types. > .TP > .B IN > Names the month in which the rule takes effect. > @@ -166,7 +239,7 @@ Gives the day on which the rule takes effect. > Recognized forms include: > .nf > .in +.5i > -.PP > +.sp > .ta \w'Sun<=25\0\0'u > 5 the fifth of the month > lastSun the last Sunday in the month > @@ -175,8 +248,14 @@ Sun>=8 first Sunday on or after the eighth > Sun<=25 last Sunday on or before the 25th > .fi > .in -.5i > -.PP > -Names of days of the week may be abbreviated or spelled out in full. > +.sp > +A weekday name (e.g., > +.BR "Sunday" ) > +or a weekday name preceded by > +.q "last" > +(e.g., > +.BR "lastSunday" ) > +may be abbreviated or spelled out in full. > Note that there must be no spaces within the > .B ON > field. > @@ -186,35 +265,41 @@ Gives the time of day at which the rule takes effect. > Recognized forms include: > .nf > .in +.5i > -.PP > -.ta \w'1:28:13\0\0'u > +.sp > +.ta \w'00:19:32.13\0\0'u > 2 time in hours > 2:00 time in hours and minutes > +01:28:14 time in hours, minutes, and seconds > 15:00 24-hour format time (for times after noon) > -1:28:14 time in hours, minutes, and seconds > -\- equivalent to 0 > +260:00 260 hours after 00:00 > +\*-2:30 2.5 hours before 00:00 > +\*- equivalent to 0 > .fi > .in -.5i > -.PP > +.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 > -.I w > +.B w > if the given time is local > .q "wall clock" > time, > -.I s > +.B s > if the given time is local > -.q standard > +.q "standard" > time, or > -.I u > +.B u > (or > -.I g > +.B g > or > -.IR z ) > +.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 > @@ -223,135 +308,184 @@ This field has the same format as the > .B AT > field > (although, of course, the > -.I w > +.B w > and > -.I s > +.B s > suffixes are not used). > +Negative offsets are allowed; in Ireland, for example, daylight saving > +time is observed in winter and has a negative offset relative to > +Irish Standard Time. > +The offset is merely added to standard time; for example, > +.B zic > +does not distinguish a 10:30 standard time plus an 0:30 > +.B SAVE > +from a 10:00 standard time plus a 1:00 > +.BR SAVE . > .TP > .B LETTER/S > Gives the > .q "variable part" > (for example, the > -.q S > +.q "S" > or > -.q D > +.q "D" > in > -.q EST > +.q "EST" > or > -.q EDT ) > -of timezone abbreviations to be used when this rule is in effect. > +.q "EDT" ) > +of time zone abbreviations to be used when this rule is in effect. > If this field is > -.BR \- , > +.q \*- , > the variable part is null. > .PP > A zone line has the form > -.PP > +.sp > .nf > .ti +.5i > -.ta \w'Zone\0\0'u +\w'Australia/Adelaide\0\0'u +\w'UTCOFF\0\0'u +\w'RULES/SAVE\0\0'u +\w'FORMAT\0\0'u > -Zone NAME UTCOFF RULES/SAVE FORMAT [UNTIL] > -.PP > +.ta \w'Zone\0\0'u +\w'Asia/Amman\0\0'u +\w'UTOFF\0\0'u +\w'Jordan\0\0'u +\w'FORMAT\0\0'u > +Zone NAME UTOFF RULES FORMAT [UNTIL] > +.sp > For example: > -.PP > +.sp > .ti +.5i > -Zone Australia/Adelaide 9:30 Aus CST 1971 Oct 31 2:00 > -.PP > +Zone Asia/Amman 2:00 Jordan EE%sT 2017 Oct 27 01:00 > +.sp > .fi > The fields that make up a zone line are: > -.TP "\w'UTCOFF'u" > +.TP "\w'UTOFF'u" > .B NAME > The name of the timezone. > This is the name used in creating the time conversion information file for the > -zone. > +timezone. > +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 UTCOFF > -The amount of time to add to UTC to get standard time in this zone. > +.B UTOFF > +The amount of time to add to UT to get standard time. > 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 UTC. > +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 timezone or, > -alternately, an amount of time to add to local standard time. > +.B RULES > +The name of the rules that apply in the timezone or, > +alternatively, a field in the same format as a rule-line SAVE column, > +giving of the amount of time to be added to local standard time > +effect, and whether the resulting time is standard or daylight saving. > If this field is > -.BR \- , > -then standard time always applies in the timezone. > +.B \*- > +then standard time always applies. > +When an amount of time is given, only the sum of standard time and > +this amount matters. > .TP > .B FORMAT > -The format for timezone abbreviations in this timezone. > +The format for time zone abbreviations. > The pair of characters > .B %s > is used to show where the > .q "variable part" > -of the timezone abbreviation goes. > -Alternately, > +of the time zone abbreviation goes. > +Alternatively, a format can use the pair of characters > +.B %z > +to stand for the UT offset in the form > +.RI \(+- hh , > +.RI \(+- hhmm , > +or > +.RI \(+- hhmmss , > +using the shortest form that does not lose information, where > +.IR hh , > +.IR mm , > +and > +.I ss > +are the hours, minutes, and seconds east (+) or west (\(mi) of UT. > +Alternatively, > a slash (/) > separates standard and daylight abbreviations. > +To conform to POSIX, a time zone abbreviation should contain only > +alphanumeric ASCII characters, > +.q "+" > +and > +.q "\*-". > .TP > .B UNTIL > -The time at which the UTC offset or the rule(s) change for a location. > -It is specified as a year, a month, a day, and a time of day. > +The time at which the UT offset or the rule(s) change for a location. > +It takes the form of YEAR [MONTH [DAY [TIME]]]. > If this is specified, > -the timezone information is generated from the given UTC offset > -and rule change until the time 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 > -columns of a rule; trailing columns can be omitted, and default to the > -earliest possible value for the missing columns. > +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 > +.q "continuation" > line; this has the same form as a zone line except that the > string > -.q Zone > +.q "Zone" > and the name are omitted, as the continuation line will > place information starting at the time specified as the > -.B UNTIL > -field in the previous line in the file used by the previous line. > -Continuation lines may contain an > -.B UNTIL > -field, just as zone lines do, indicating that the next line is a further > +.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 > +If a zone changes at the same instant that a rule would otherwise take > +effect in the earlier zone or continuation line, the rule is ignored. > +In a single zone it is an error if two rules take effect at the same > +instant, or if two zone changes take effect at the same instant. > .PP > +A link line has the form > +.sp > .nf > .ti +.5i > .ta \w'Link\0\0'u +\w'Europe/Istanbul\0\0'u > -Link LINK-FROM LINK-TO > -.PP > +Link TARGET LINK-NAME > +.sp > For example: > -.PP > +.sp > .ti +.5i > Link Europe/Istanbul Asia/Istanbul > -.PP > +.sp > .fi > The > -.B LINK-FROM > +.B TARGET > field should appear as the > .B NAME > -field in some zone line; > -the > -.B LINK-TO > -field is used as an alternate name for that zone. > +field in some zone line. > +The > +.B LINK-NAME > +field is used as an alternative 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 > -.PP > +.sp > Leap YEAR MONTH DAY HH:MM:SS CORR R/S > -.PP > +.sp > For example: > .ti +.5i > -.PP > -Leap 1974 Dec 31 23:59:60 + S > -.PP > +.sp > +Leap 2016 Dec 31 23:59:60 + S > +.sp > .fi > The > .BR YEAR , > @@ -364,44 +498,110 @@ The > .B CORR > field > should be > -.q + > +.q "+" > if a second was added > or > -.q - > +.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 > +.q "Stationary" > if the leap second time given by the other fields should be interpreted as UTC > or > (an abbreviation of) > -.q Rolling > +.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 > +.B zic > +input, intended to illustrate many of its features. > +In this example, the EU rules are for the European Union > +and for its predecessor organization, the European Communities. > +.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'0:34:08\0\0'u +\w'RULES\0\0'u +\w'FORMAT\0\0'u > +# Zone NAME UTOFF RULES 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 Europe/Vaduz > +.sp > +.in > +.fi > +In this example, the timezone is named Europe/Zurich but it has an alias > +as Europe/Vaduz. This example says that Zurich was 34 minutes and 8 > +seconds east 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 the UT offset became one hour > +and Swiss daylight saving rules (defined with lines beginning with > +.q "Rule Swiss") > +apply. 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, > +.q "LMT" > +and > +.q "BMT" > +were initially used, respectively. Since > +Swiss rules and later EU rules were applied, the time zone abbreviation > +has been CET for standard time and CEST for daylight saving > +time. > .SH FILES > .TP > -.I /usr/local/etc/zoneinfo > -Standard directory used for created files. > +.I /etc/localtime > +Default local timezone file. > +.TP > +.I /usr/share/zoneinfo > +Default timezone information directory. > .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 timezone, > +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, > +.B 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. > .SH SEE ALSO > .BR tzfile (5), > .BR zdump (8) > -.\" @(#)zic.8 7.19 > +.\" This file is in the public domain, so clarified as of > +.\" 2009-05-17 by Arthur David Olson. > -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Linux/UNIX System Programming Training: http://man7.org/training/