shithub: purgatorio

ref: 9ca327dd06c30341d984bff84727ea451b428db7
dir: /man/2/daytime/

View raw version
.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.