3 IMPORT Dates
, Strings
, time
:= PosixCtime
;
5 (* add localization? *)
8 Hook
= POINTER TO RECORD (Dates
.Hook
) END;
11 day
: ARRAY 7, 10 OF CHAR;
12 month
: ARRAY 12, 10 OF CHAR;
14 PROCEDURE (h
: Hook
) GetTime (OUT d
: Dates
.Date
; OUT t
: Dates
.Time
);
15 VAR epoch
: time
.time_t
; tm
: time
.struct_tm
; ptm
: time
.Pstruct_tm
;
17 epoch
:= time
.time(NIL);
18 ptm
:= time
.localtime_r(epoch
, tm
);
20 d
.year
:= tm
.tm_year
+ 1900;
21 d
.month
:= tm
.tm_mon
+ 1;
24 t
.minute
:= tm
.tm_min
;
36 PROCEDURE (h
: Hook
) GetUTCTime (OUT d
: Dates
.Date
; OUT t
: Dates
.Time
);
37 VAR epoch
: time
.time_t
; tm
: time
.struct_tm
; ptm
: time
.Pstruct_tm
;
39 epoch
:= time
.time(NIL);
40 ptm
:= time
.gmtime_r(epoch
, tm
);
42 d
.year
:= tm
.tm_year
+ 1900;
43 d
.month
:= tm
.tm_mon
+ 1;
46 t
.minute
:= tm
.tm_min
;
58 PROCEDURE (h
: Hook
) GetUTCBias (OUT bias
: INTEGER);
62 (* bias := time.timezone DIV 60 *)
66 PROCEDURE (h
: Hook
) DateToString (d
: Dates
.Date
; format
: INTEGER; OUT str
: ARRAY OF CHAR);
67 VAR s
: ARRAY 20 OF CHAR;
69 PROCEDURE Copy (IN s
: ARRAY OF CHAR; n
: INTEGER; OUT str
: ARRAY OF CHAR);
72 FOR i
:= 0 TO n
- 1 DO
81 str
[0] := CHR(d
.day
DIV 10 MOD 10 + ORD("0"));
82 str
[1] := CHR(d
.day
MOD 10 + ORD("0"));
84 str
[3] := CHR(d
.month
DIV 10 MOD 10 + ORD("0"));
85 str
[4] := CHR(d
.month
MOD 10 + ORD("0"));
87 str
[6] := CHR(d
.year
DIV 10 MOD 10 + ORD("0"));
88 str
[7] := CHR(d
.year
MOD 10 + ORD("0"));
91 Copy(day
[d
.day
- 1], 3, str
);
92 Copy(month
[d
.month
- 1], 3, s
); str
:= str
+ ", " + s
;
93 Strings
.IntToString(d
.year
, s
); str
:= str
+ ", " + s
95 str
:= day
[d
.day
- 1] + ", " + month
[d
.month
- 1];
96 Strings
.IntToString(d
.year
, s
); str
:= str
+ ", " + s
97 | Dates
.plainAbbreviated
:
98 Copy(month
[d
.month
- 1], 3, str
);
99 Strings
.IntToString(d
.day
, s
); str
:= str
+ " " + s
;
100 Strings
.IntToString(d
.year
, s
); str
:= str
+ ", " + s
102 Strings
.IntToString(d
.day
, s
); str
:= month
[d
.month
- 1] + " " + s
;
103 Strings
.IntToString(d
.year
, s
); str
:= str
+ ", " + s
107 PROCEDURE (h
: Hook
) TimeToString (t
: Dates
.Time
; OUT str
: ARRAY OF CHAR);
108 VAR s
: ARRAY 12 OF CHAR;
110 Strings
.IntToString(t
.hour
, str
);
111 Strings
.IntToString(t
.minute
, s
); str
:= str
+ ":" + s
;
112 Strings
.IntToString(t
.second
, s
); str
:= str
+ ":" + s
;
120 day
[2] := "Wednesday";
121 day
[3] := "Thursday";
123 day
[5] := "Saturday";
125 month
[0] := "January";
126 month
[1] := "February";
132 month
[7] := "August";
133 month
[8] := "September";
134 month
[9] := "October";
135 month
[10] := "November";
136 month
[11] := "December";
137 NEW(h
); Dates
.SetHook(h
)