1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
.TH DAYTIME 2
.SH NAME
daytime: text, filet, gmt, local, now, string2tm, time, tm2epoch \- time conversions
.SH SYNOPSIS
.EX
include "daytime.m";
daytime := load Daytime Daytime->PATH;
Tm: adt
{
sec: int; # seconds (0 to 59)
min: int; # minutes (0 to 59)
hour: int; # hours (0 to 23)
mday: int; # day of the month (1 to 31)
mon: int; # month (0 to 11)
year: int; # year-1900; 2000AD is 100
wday: int; # day of week (0 to 6, Sunday is 0)
yday: int; # day of year (0 to 365)
zone: string; # time zone name
tzoff: int; # time zone offset (seconds from GMT)
};
text: fn(tm: ref Tm): string;
filet: fn(now, t: int): string;
gmt: fn(tim: int): ref Tm;
local: fn(tim: int): ref Tm;
now: fn(): int;
time: fn(): string;
tm2epoch: fn(tm: ref Tm): int;
string2tm: fn(date: string): ref Tm;
.EE
.SH DESCRIPTION
These routines perform time conversions relative to the
epoch 00:00:00 GMT, Jan. 1, 1970.
Note the range of values for each member of the
.B Tm
adt.
The conventions are the same as those of C's
.IR ctime .
.PP
.B Text
converts a time structure referenced by
.I tm
from local or GMT time to a string in the format:
.IP
.B "Sat Jan 1 13:00:00 GMT 2000"
.PP
.B Filet
converts the file access or modification time
.I t
from seconds since the epoch to local time as a string
in the format:
.IP
.B "Jan 1 13:00"
.PP
if the file is less than 6 months old or
.IP
.B "Jan 1 2000"
.PP
if the file is older than 6 months, compared to the time
.IR now .
.PP
.B Gmt
converts seconds since the epoch, received in
.IR tim ,
to a time structure in Greenwich Mean Time (GMT).
.PP
.B Local
converts seconds since the epoch, received in
.IR tim ,
to a time structure in local time.
.PP
.B Now
returns the time in seconds since the epoch, obtained by reading
.B /dev/time
(see
.IR cons (3)).
.PP
.B Time
converts seconds since the epoch
to the local time as a string in the format
.BR "Fri May 19 17:01:36 BST 2000" .
.PP
.B Tm2epoch
converts a time structure referenced by
.I tm
from local or GMT time to seconds since the epoch.
.PP
.B String2tm
returns a reference to a
.B Tm
value corresponding to the date and time in textual form in string
.IR s ,
which must have one of the forms below:
.IP
.EX
Sun, 06 Nov 1994 08:49:37 GMT \fR(RFC822, RFC1123)\fP
Sunday, 06-Nov-94 08:49:37 GMT \fR(RFC850)\fP
Sun Nov 6 08:49:37 GMT 1994 \fR(output of \fPtext\fR, above)\fP
.EE
.PP
A missing time zone in any format is assumed to be
.BR GMT .
.B String2tm
returns nil if
.I s
is not correctly formed.
.PP
When local time is first requested,
.B daytime
reads a table for time zone conversion from the
.B timezone
environment variable, if that is set,
and otherwise from the file
.BR /locale/timezone ,
which is copied from one of the other files in
.B /locale
when the system is installed.
The timezone table is a text file containing lines of space-separated fields.
The first line gives the normal time zone name and its difference from GMT
in seconds followed by an alternative time zone name (eg, for `daylight savings' or `summer' time) and
its difference from GMT followed by a newline.
The remainder is a list of pairs of times
(seconds past the start of 1970, in the first time zone)
when the alternative time zone applies.
For example:
.IP
.EX
EST -18000 EDT -14400
9943200 25664400 41392800 57718800 ...
.EE
.PP
Greenwich Mean Time is represented by
.IP
.EX
GMT 0
.EE
.SH SOURCE
.B /appl/lib/daytime.b
.SH SEE ALSO
.IR cons (3),
.IR sys-millisec (2)
.SH BUGS
The sign bit of a Limbo integer holding a time will turn on 68 years from the
epoch.
|