xref: /freebsd/contrib/tzcode/zic.8 (revision 61e21613)
1.\" This file is in the public domain, so clarified as of
2.\" 2009-05-17 by Arthur David Olson.
3.Dd January 21, 2023
4.Dt ZIC 8
5.Os
6.Sh NAME
7.Nm zic
8.Nd timezone compiler
9.Sh SYNOPSIS
10.Nm
11.Op Fl -help
12.Op Fl -version
13.Op Fl Dsv
14.Op Fl b Ar slim | fat
15.Op Fl d Ar directory
16.Op Fl g Ar gid
17.Op Fl l Ar localtime
18.Op Fl L Ar leapseconds
19.Op Fl m Ar mode
20.Op Fl p Ar posixrules
21.Oo
22.Fl r
23.Op @ Ns Ar lo Ns
24.Op /@ Ns Ar hi
25.Oc
26.Op Fl R @ Ns Ar hi
27.Op Fl t Ar localtime-link
28.Op Fl u Ar uid
29.Op Ar filename ...
30.Sh DESCRIPTION
31The
32.Nm
33program reads text from the file(s) named on the command line
34and creates the timezone information format (TZif) files
35specified in this input.
36If a
37.Ar filename
38is
39.Dq "-" ,
40standard input is read.
41.Pp
42The following options are available:
43.Bl -tag -width indent
44.It Fl -version
45Output version information and exit.
46.It Fl -help
47Output short usage message and exit.
48.It Fl b Ar bloat
49Output backward-compatibility data as specified by
50.Ar bloat .
51If
52.Ar bloat
53is
54.Cm fat ,
55generate additional data entries that work around potential bugs or
56incompatibilities in older software, such as software that mishandles
57the 64-bit generated data.
58If
59.Ar bloat
60is
61.Cm slim ,
62keep the output files small; this can help check for the bugs
63and incompatibilities.
64The default is
65.Cm slim ,
66as software that mishandles 64-bit data typically
67mishandles timestamps after the year 2038 anyway.
68Also see the
69.Fl r
70option for another way to alter output size.
71.It Fl D
72Do not create directories.
73.It Fl d Ar directory
74Create time conversion information files in the named directory rather than
75in the standard directory named below.
76.It Fl l Ar timezone
77Use
78.Ar timezone
79as local time.
80The
81.Nm
82utility
83will act as if the input contained a link line of the form
84.Bd -literal -offset indent
85Link	timezone		localtime
86.Ed
87.Pp
88If
89.Ar timezone
90is
91.Ql - ,
92any already-existing link is removed.
93.It Fl L Ar filename
94Read leap second information from the file with the given name.
95If this option is not used,
96no leap second information appears in output files.
97.It Fl p Ar timezone
98Use
99.Ar timezone 's
100rules when handling nonstandard
101TZ strings like
102.Dq "EET\-2EEST"
103that lack transition rules.
104The
105.Nm
106utility
107will act as if the input contained a link line of the form
108.Bd -literal -offset indent
109Link	\fItimezone\fP		posixrules
110.Ed
111.Pp
112Unless
113.Ar timezone
114is
115.Dq "\*-" ,
116this option is obsolete and poorly supported.
117Among other things it should not be used for timestamps after the year 2037,
118and it should not be combined with
119.Fl b Cm slim
120if
121.Ar timezone 's
122transitions are at standard time or Universal Time (UT) instead of local time.
123.Pp
124If
125.Ar timezone
126is
127.Ql - ,
128any already-existing link is removed.
129.It Fl r Oo @ Ns Ar lo Oc Ns Oo /@ Ns Ar hi Oc
130Limit the applicability of output files
131to timestamps in the range from
132.Ar lo
133(inclusive) to
134.Ar hi
135(exclusive), where
136.Ar lo
137and
138.Ar hi
139are possibly signed decimal counts of seconds since the Epoch
140(1970-01-01 00:00:00 UTC).
141Omitted counts default to extreme values.
142The output files use UT offset 0 and abbreviation
143.Dq "\-00"
144in place of the omitted timestamp data.
145For example,
146.Fl r @0
147omits data intended for negative timestamps (i.e., before the Epoch), and
148.Fl r @0/@2147483648
149outputs data intended only for nonnegative timestamps that fit into
15031-bit signed integers.
151Although this option typically reduces the output file's size,
152the size can increase due to the need to represent the timestamp range
153boundaries, particularly if
154.Ar hi
155causes a TZif file to contain explicit entries for
156.Em pre-
157.Ar hi
158transitions rather than concisely representing them
159with an extended POSIX TZ string.
160Also see the
161.Fl b Cm slim
162option for another way to shrink output size.
163.It Fl R @ Ns Ar hi
164Generate redundant trailing explicit transitions for timestamps
165that occur less than
166.Ar hi
167seconds since the Epoch, even though the transitions could be
168more concisely represented via the extended POSIX TZ string.
169This option does not affect the represented timestamps.
170Although it accommodates nonstandard TZif readers
171that ignore the extended POSIX TZ string,
172it increases the size of the altered output files.
173.It Fl t Ar file
174When creating local time information, put the configuration link in
175the named file rather than in the standard location.
176.It Fl v
177Be more verbose, and complain about the following situations:
178.Bl -bullet
179.It
180The input specifies a link to a link,
181something not supported by some older parsers, including
182.Nm
183itself through release 2022e.
184.It
185A year that appears in a data file is outside the range
186of representable years.
187.It
188A time of 24:00 or more appears in the input.
189Pre-1998 versions of
190.Nm
191prohibit 24:00, and pre-2007 versions prohibit times greater than 24:00.
192.It
193A rule goes past the start or end of the month.
194Pre-2004 versions of
195.Nm
196prohibit this.
197.It
198A time zone abbreviation uses a
199.Ql %z
200format.
201Pre-2015 versions of
202.Nm
203do not support this.
204.It
205A timestamp contains fractional seconds.
206Pre-2018 versions of
207.Nm
208do not support this.
209.It
210The input contains abbreviations that are mishandled by pre-2018 versions of
211.Nm
212due to a longstanding coding bug.
213These abbreviations include
214.Dq L
215for
216.Dq Link ,
217.Dq mi
218for
219.Dq min ,
220.Dq Sa
221for
222.Dq Sat ,
223and
224.Dq Su
225for
226.Dq Sun .
227.It
228The output file does not contain all the information about the
229long-term future of a timezone, because the future cannot be summarized as
230an extended POSIX TZ string.
231For example, as of 2023 this problem
232occurs for Morocco's daylight-saving rules, as these rules are based
233on predictions for when Ramadan will be observed, something that
234an extended POSIX TZ string cannot represent.
235.It
236The output contains data that may not be handled properly by client
237code designed for older
238.Nm
239output formats.
240These compatibility issues affect only timestamps
241before 1970 or after the start of 2038.
242.It
243The output contains a truncated leap second table,
244which can cause some older TZif readers to misbehave.
245This can occur if the
246.Fl L
247option is used, and either an Expires line is present or
248the
249.Fl r
250option is also used.
251.It
252The output file contains more than 1200 transitions,
253which may be mishandled by some clients.
254The current reference client supports at most 2000 transitions;
255pre-2014 versions of the reference client support at most 1200
256transitions.
257.It
258A time zone abbreviation has fewer than 3 or more than 6 characters.
259POSIX requires at least 3, and requires implementations to support
260at least 6.
261.It
262An output file name contains a byte that is not an ASCII letter,
263.Dq "\-" ,
264.Dq "/" ,
265or
266.Dq "_" ;
267or it contains a file name component that contains more than 14 bytes
268or that starts with
269.Dq "\-" .
270.El
271.El
272.RE
273.Sh FILES
274Input files use the format described in this section; output files use
275.Xr tzfile 5
276format.
277.Pp
278Input files should be text files, that is, they should be a series of
279zero or more lines, each ending in a newline byte and containing at
280most 2048 bytes counting the newline, and without any NUL bytes.
281The input text's encoding
282is typically UTF-8 or ASCII; it should have a unibyte representation
283for the POSIX Portable Character Set (PPCS)
284\*<https://pubs\*:.opengroup\*:.org/\*:onlinepubs/\*:9699919799/\*:basedefs/\*:V1_chap06\*:.html\*>
285and the encoding's non-unibyte characters should consist entirely of
286non-PPCS bytes.
287Non-PPCS characters typically occur only in comments:
288although output file names and time zone abbreviations can contain
289nearly any character, other software will work better if these are
290limited to the restricted syntax described under the
291.Fl v
292option.
293.Pp
294Input lines are made up of fields.
295Fields are separated from one another by one or more white space characters.
296The white space characters are space, form feed, carriage return, newline,
297tab, and vertical tab.
298Leading and trailing white space on input lines is ignored.
299An unquoted sharp character (\(sh) in the input introduces a comment which extends
300to the end of the line the sharp character appears on.
301White space characters and sharp characters may be enclosed in double quotes
302(\(dq) if they're to be used as part of a field.
303Any line that is blank (after comment stripping) is ignored.
304Nonblank lines are expected to be of one of three types:
305rule lines, zone lines, and link lines.
306.Pp
307Names must be in English and are case insensitive.
308They appear in several contexts, and include month and weekday names
309and keywords such as
310.Dq "maximum" ,
311.Dq "only" ,
312.Dq "Rolling" ,
313and
314.Dq "Zone" .
315A name can be abbreviated by omitting all but an initial prefix; any
316abbreviation must be unambiguous in context.
317.Pp
318A rule line has the form
319.Bd -literal -offset indent
320Rule	NAME	FROM	TO	\-	IN	ON	AT	SAVE	LETTER/S
321.Ed
322.Pp
323For example:
324.Bd -literal -offset indent
325Rule	US	1967	1973	\-	Apr	lastSun	2:00w	1:00d	D
326.Ed
327.Pp
328The fields that make up a rule line are:
329.Bl -tag -width "LETTER/S"
330.It NAME
331Gives the name of the rule set that contains this line.
332The name must start with a character that is neither
333an ASCII digit nor
334.Dq \-
335nor
336.Dq + .
337To allow for future extensions,
338an unquoted name should not contain characters from the set
339.Dq Ql "!$%&'()*,/:;<=>?@[\]^`{|}~" .
340.It FROM
341Gives the first year in which the rule applies.
342Any signed integer year can be supplied; the proleptic Gregorian calendar
343is assumed, with year 0 preceding year 1.
344The word
345.Cm minimum
346(or an abbreviation) means the indefinite past.
347The word
348.Cm maximum
349(or an abbreviation) means the indefinite future.
350Rules can describe times that are not representable as time values,
351with the unrepresentable times ignored; this allows rules to be portable
352among hosts with differing time value types.
353.It TO
354Gives the final year in which the rule applies.
355In addition to
356.Cm minimum
357and
358.Cm maximum
359(as above),
360the word
361.Cm only
362(or an abbreviation)
363may be used to repeat the value of the
364.Ar FROM
365field.
366.It \-
367Is a reserved field and should always contain
368.Ql \-
369for compatibility with older versions of
370.Nm .
371It was previously known as the
372.Ar TYPE
373field, which could contain values to allow a
374separate script to further restrict in which
375.Dq types
376of years the rule would apply.
377.It IN
378Names the month in which the rule takes effect.
379Month names may be abbreviated.
380.It ON
381Gives the day on which the rule takes effect.
382Recognized forms include:
383.Bl -tag -compact -width "Sun<=25"
384.It 5
385the fifth of the month
386.It lastSun
387the last Sunday in the month
388.It lastMon
389the last Monday in the month
390.It Sun>=8
391first Sunday on or after the eighth
392.It Sun<=25
393last Sunday on or before the 25th
394.El
395.Pp
396A weekday name (e.g.,
397.Ql "Sunday" )
398or a weekday name preceded by
399.Dq "last"
400(e.g.,
401.Ql "lastSunday" )
402may be abbreviated or spelled out in full.
403There must be no white space characters within the
404.Ar ON
405field.
406The
407.Dq <=
408and
409.Dq >=
410constructs can result in a day in the neighboring month;
411for example, the IN-ON combination
412.Dq "Oct Sun>=31"
413stands for the first Sunday on or after October 31,
414even if that Sunday occurs in November.
415.It AT
416Gives the time of day at which the rule takes effect,
417relative to 00:00, the start of a calendar day.
418Recognized forms include:
419.Bl -tag -compact -width "00:19:32.13"
420.It 2
421time in hours
422.It 2:00
423time in hours and minutes
424.It 01:28:14
425time in hours, minutes, and seconds
426.It 00:19:32.13
427time with fractional seconds
428.It 12:00
429midday, 12 hours after 00:00
430.It 15:00
4313 PM, 15 hours after 00:00
432.It 24:00
433end of day, 24 hours after 00:00
434.It 260:00
435260 hours after 00:00
436.It \-2:30
4372.5 hours before 00:00
438.It \-
439equivalent to 0
440.El
441.Pp
442Although
443.Nm
444rounds times to the nearest integer second
445(breaking ties to the even integer), the fractions may be useful
446to other applications requiring greater precision.
447The source format does not specify any maximum precision.
448Any of these forms may be followed by the letter
449.Ql w
450if the given time is local or
451.Dq "wall clock"
452time,
453.Ql s
454if the given time is standard time without any adjustment for daylight saving,
455or
456.Ql u
457(or
458.Ql g
459or
460.Ql z )
461if the given time is universal time;
462in the absence of an indicator,
463local (wall clock) time is assumed.
464These forms ignore leap seconds; for example,
465if a leap second occurs at 00:59:60 local time,
466.Ql "1:00"
467stands for 3601 seconds after local midnight instead of the usual 3600 seconds.
468The intent is that a rule line describes the instants when a
469clock/calendar set to the type of time specified in the
470.Ar AT
471field would show the specified date and time of day.
472.It SAVE
473Gives the amount of time to be added to local standard time when the rule is in
474effect, and whether the resulting time is standard or daylight saving.
475This field has the same format as the
476.Ar AT
477field
478except with a different set of suffix letters:
479.Ql s
480for standard time and
481.Ql d
482for daylight saving time.
483The suffix letter is typically omitted, and defaults to
484.Ql s
485if the offset is zero and to
486.Ql d
487otherwise.
488Negative offsets are allowed; in Ireland, for example, daylight saving
489time is observed in winter and has a negative offset relative to
490Irish Standard Time.
491The offset is merely added to standard time; for example,
492.Nm
493does not distinguish a 10:30 standard time plus an 0:30
494.Ar SAVE
495from a 10:00 standard time plus a 1:00
496.Ar SAVE .
497.It LETTER/S
498Gives the
499.Dq "variable part"
500(for example, the
501.Dq "S"
502or
503.Dq "D"
504in
505.Dq "EST"
506or
507.Dq "EDT" )
508of time zone abbreviations to be used when this rule is in effect.
509If this field is
510.Ql \- ,
511the variable part is null.
512.El
513.Pp
514A zone line has the form
515.Bd -literal -offset indent
516Zone	NAME	STDOFF	RULES	FORMAT	[UNTIL]
517.Ed
518.Pp
519For example:
520.Bd -literal -offset indent
521Zone	Asia/Amman	2:00	Jordan	EE%sT	2017 Oct 27 01:00
522.Ed
523.Pp
524The fields that make up a zone line are:
525.Bl -tag -width "STDOFF"
526.It NAME
527The name of the timezone.
528This is the name used in creating the time conversion information file for the
529timezone.
530It should not contain a file name component
531.Dq ".\&"
532or
533.Dq ".." ;
534a file name component is a maximal substring that does not contain
535.Dq "/" .
536.It STDOFF
537The amount of time to add to UT to get standard time,
538without any adjustment for daylight saving.
539This field has the same format as the
540.Ar AT
541and
542.Ar SAVE
543fields of rule lines, except without suffix letters;
544begin the field with a minus sign if time must be subtracted from UT.
545.It RULES
546The name of the rules that apply in the timezone or,
547alternatively, a field in the same format as a rule-line SAVE column,
548giving the amount of time to be added to local standard time
549and whether the resulting time is standard or daylight saving.
550If this field is
551.Ql \-
552then standard time always applies.
553When an amount of time is given, only the sum of standard time and
554this amount matters.
555.It FORMAT
556The format for time zone abbreviations.
557The pair of characters
558.Ql %s
559is used to show where the
560.Dq "variable part"
561of the time zone abbreviation goes.
562Alternatively, a format can use the pair of characters
563.Ql %z
564to stand for the UT offset in the form
565.Ar \(+- hh ,
566.Ar \(+- hhmm ,
567or
568.Ar \(+- hhmmss ,
569using the shortest form that does not lose information, where
570.Ar hh ,
571.Ar mm ,
572and
573.Ar ss
574are the hours, minutes, and seconds east (+) or west (\-) of UT.
575Alternatively,
576a slash (/)
577separates standard and daylight abbreviations.
578To conform to POSIX, a time zone abbreviation should contain only
579alphanumeric ASCII characters,
580.Ql "+"
581and
582.Ql "\-".
583By convention, the time zone abbreviation
584.Ql "\-00"
585is a placeholder that means local time is unspecified.
586.It UNTIL
587The time at which the UT offset or the rule(s) change for a location.
588It takes the form of one to four fields
589.Ar YEAR Op Ar MONTH Op Ar DAY Op Ar TIME .
590If this is specified,
591the time zone information is generated from the given UT offset
592and rule change until the time specified, which is interpreted using
593the rules in effect just before the transition.
594The month, day, and time of day have the same format as the
595.Ar IN ,
596.Ar ON ,
597and
598.Ar AT
599fields of a rule; trailing fields can be omitted, and default to the
600earliest possible value for the missing fields.
601.IP
602The next line must be a
603.Dq "continuation"
604line; this has the same form as a zone line except that the
605string
606.Dq "Zone"
607and the name are omitted, as the continuation line will
608place information starting at the time specified as the
609.Dq "until"
610information in the previous line in the file used by the previous line.
611Continuation lines may contain
612.Dq "until"
613information, just as zone lines do, indicating that the next line is a further
614continuation.
615.El
616.Pp
617If a zone changes at the same instant that a rule would otherwise take
618effect in the earlier zone or continuation line, the rule is ignored.
619A zone or continuation line
620.Ar L
621with a named rule set starts with standard time by default:
622that is, any of
623.Ar L 's
624timestamps preceding
625.Ar L 's
626earliest rule use the rule in effect after
627.Ar L 's
628first transition into standard time.
629In a single zone it is an error if two rules take effect at the same
630instant, or if two zone changes take effect at the same instant.
631.Pp
632If a continuation line subtracts
633.Ar N
634seconds from the UT offset after a transition that would be
635interpreted to be later if using the continuation line's UT offset and
636rules, the
637.Dq "until"
638time of the previous zone or continuation line is interpreted
639according to the continuation line's UT offset and rules, and any rule
640that would otherwise take effect in the next
641.Ar N
642seconds is instead assumed to take effect simultaneously.
643For example:
644.Bd -literal -offset indent
645# Rule	NAME	FROM	TO	\*-	IN	ON	AT	SAVE	LETTER/S
646Rule	US	1967	2006	-	Oct	lastSun	2:00	0	S
647Rule	US	1967	1973	-	Apr	lastSun	2:00	1:00	D
648
649# Zone\0\0NAME	STDOFF	RULES	FORMAT	[UNTIL]
650Zone\0\0America/Menominee	\*-5:00	\*-	EST	1973 Apr 29 2:00
651	\*-6:00	US	C%sT
652.Ed
653Here, an incorrect reading would be there were two clock changes on 1973-04-29,
654the first from 02:00 EST (\-05) to 01:00 CST (\-06),
655and the second an hour later from 02:00 CST (\-06) to 03:00 CDT (\-05).
656However,
657.Nm
658interprets this more sensibly as a single transition from 02:00 CST (\-05) to
65902:00 CDT (\-05).
660.Pp
661A link line has the form
662.Bd -literal -offset indent
663Link	TARGET	LINK-NAME
664.Ed
665.Pp
666For example:
667.Bd -literal -offset indent
668Link	Europe/Istanbul	Asia/Istanbul
669.Ed
670.Pp
671The
672.Ar TARGET
673field should appear as the
674.Ar NAME
675field in some zone line or as the
676.Ar LINK-NAME
677field in some link line.
678The
679.Ar LINK-NAME
680field is used as an alternative name for that zone;
681it has the same syntax as a zone line's
682.Ar NAME
683field.
684Links can chain together, although the behavior is unspecified if a
685chain of one or more links does not terminate in a Zone name.
686A link line can appear before the line that defines the link target.
687For example:
688.Bd -literal -offset indent
689Link	Greenwich	G_M_T
690Link	Etc/GMT	Greenwich
691Zone	Etc/GMT\0\00\0\0\-\0\0GMT
692.Ed
693.Pp
694The two links are chained together, and G_M_T, Greenwich, and Etc/GMT
695all name the same zone.
696.Pp
697Except for continuation lines,
698lines may appear in any order in the input.
699However, the behavior is unspecified if multiple zone or link lines
700define the same name.
701.Pp
702The file that describes leap seconds can have leap lines and an
703expiration line.
704Leap lines have the following form:
705.Bd -literal -offset indent
706Leap	YEAR	MONTH	DAY	HH:MM:SS	CORR	R/S
707.Ed
708.Pp
709For example:
710.Bd -literal -offset indent
711Leap	2016	Dec	31	23:59:60	+	S
712.Ed
713.Pp
714The
715.Ar YEAR ,
716.Ar MONTH ,
717.Ar DAY ,
718and
719.Ar HH:MM:SS
720fields tell when the leap second happened.
721The
722.Ar CORR
723field
724should be
725.Ql "+"
726if a second was added
727or
728.Ql "\-"
729if a second was skipped.
730The
731.Ar R/S
732field
733should be (an abbreviation of)
734.Dq "Stationary"
735if the leap second time given by the other fields should be interpreted as UTC
736or
737(an abbreviation of)
738.Dq "Rolling"
739if the leap second time given by the other fields should be interpreted as
740local (wall clock) time.
741.Pp
742Rolling leap seconds were implemented back when it was not
743clear whether common practice was rolling or stationary,
744with concerns that one would see
745Times Square ball drops where there'd be a
746.Dq "3... 2... 1... leap... Happy New Year"
747countdown, placing the leap second at
748midnight New York time rather than midnight UTC.
749However, this countdown style does not seem to have caught on,
750which means rolling leap seconds are not used in practice;
751also, they are not supported if the
752.Fl r
753option is used.
754.Pp
755The expiration line, if present, has the form:
756.Bd -literal -offset indent
757Expires	YEAR	MONTH	DAY	HH:MM:SS
758.Ed
759.Pp
760For example:
761.Bd -literal -offset indent
762Expires	2020	Dec	28	00:00:00
763.Ed
764.Pp
765The
766.Ar YEAR ,
767.Ar MONTH ,
768.Ar DAY ,
769and
770.Ar HH:MM:SS
771fields give the expiration timestamp in UTC for the leap second table.
772.Sh "EXTENDED EXAMPLE"
773Here is an extended example of
774.Nm
775input, intended to illustrate many of its features.
776.Bd -literal -offset indent
777# Rule	NAME	FROM	TO	\-	IN	ON	AT	SAVE	LETTER/S
778Rule	Swiss	1941	1942	\-	May	Mon>=1	1:00	1:00	S
779Rule	Swiss	1941	1942	\-	Oct	Mon>=1	2:00	0	\-
780
781Rule	EU	1977	1980	\-	Apr	Sun>=1	1:00u	1:00	S
782Rule	EU	1977	only	\-	Sep	lastSun	1:00u	0	\-
783Rule	EU	1978	only	\-	Oct	 1	1:00u	0	\-
784Rule	EU	1979	1995	\-	Sep	lastSun	1:00u	0	\-
785Rule	EU	1981	max	\-	Mar	lastSun	1:00u	1:00	S
786Rule	EU	1996	max	\-	Oct	lastSun	1:00u	0	\-
787
788# Zone	NAME	STDOFF	RULES	FORMAT	[UNTIL]
789Zone	Europe/Zurich	0:34:08	\-	LMT	1853 Jul 16
790		0:29:45.50	\-	BMT	1894 Jun
791		1:00	Swiss	CE%sT	1981
792		1:00	EU	CE%sT
793
794Link	Europe/Zurich	Europe/Vaduz
795.Ed
796.Pp
797In this example, the EU rules are for the European Union
798and for its predecessor organization, the European Communities.
799The timezone is named Europe/Zurich and it has the alias Europe/Vaduz.
800This example says that Zurich was 34 minutes and 8
801seconds east of UT until 1853-07-16 at 00:00, when the legal offset
802was changed to
8037\(de26\(fm22.50\(sd,
804which works out to 0:29:45.50;
805.Nm
806treats this by rounding it to 0:29:46.
807After 1894-06-01 at 00:00 the UT offset became one hour
808and Swiss daylight saving rules (defined with lines beginning with
809.Dq "Rule Swiss")
810apply.
811From 1981 to the present, EU daylight saving rules have
812applied, and the UTC offset has remained at one hour.
813.Pp
814In 1941 and 1942, daylight saving time applied from the first Monday
815in May at 01:00 to the first Monday in October at 02:00.
816The pre-1981 EU daylight-saving rules have no effect
817here, but are included for completeness.
818Since 1981, daylight
819saving has begun on the last Sunday in March at 01:00 UTC.
820Until 1995 it ended the last Sunday in September at 01:00 UTC,
821but this changed to the last Sunday in October starting in 1996.
822.Pp
823For purposes of display,
824.Dq "LMT"
825and
826.Dq "BMT"
827were initially used, respectively.
828Since
829Swiss rules and later EU rules were applied, the time zone abbreviation
830has been CET for standard time and CEST for daylight saving
831time.
832.Sh FILES
833.Bl -tag -width "/usr/share/zoneinfo"
834.It Pa /etc/localtime
835Default local timezone file.
836.It Pa /usr/share/zoneinfo
837Default timezone information directory.
838.El
839.Sh NOTES
840For areas with more than two types of local time,
841you may need to use local standard time in the
842.Ar AT
843field of the earliest transition time's rule to ensure that
844the earliest transition time recorded in the compiled file is correct.
845.Pp
846If,
847for a particular timezone,
848a clock advance caused by the start of daylight saving
849coincides with and is equal to
850a clock retreat caused by a change in UT offset,
851.Nm
852produces a single transition to daylight saving at the new UT offset
853without any change in local (wall clock) time.
854To get separate transitions
855use multiple zone continuation lines
856specifying transition instants using universal time.
857.Sh SEE ALSO
858.Xr tzfile 5 ,
859.Xr zdump 8
860