Skip to content

Commit 6c1b06d

Browse files
committed
Time: 2019 -> 2020
1 parent 4afa2fc commit 6c1b06d

File tree

3 files changed

+30
-19
lines changed

3 files changed

+30
-19
lines changed

dune

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959

6060
(executable
6161
(name test)
62-
(libraries devkit extlib libevent netstring ounit2 yojson)
62+
(libraries devkit extlib extunix libevent netstring ounit2 yojson)
6363
(modules test test_httpev))
6464

6565
(rule

test.ml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ open OUnit
22
open Printf
33
open ExtLib
44

5+
module U = ExtUnix.Specific
6+
57
open Devkit
68

79
let tests = ref []
@@ -182,6 +184,13 @@ let () = test "Time.show_duration" begin fun () ->
182184
t 93784. "1 day 2 hours 3 mins 4 secs";
183185
end
184186

187+
let () = test "Time.basic_string" begin fun () ->
188+
let t n s = assert_equal ~printer:id s (Time.basic_gmt_string n) in
189+
t (U.timegm @@ U.strptime "%Y%m%d %H%M%S" "20200101 123456") "2020-01-01 12:34:56";
190+
t (U.timegm @@ U.strptime "%Y%m%d %H%M%S" "20190101 123456") "2019-01-01 12:34:56";
191+
t (U.timegm @@ U.strptime "%Y%m%d %H%M%S" "20090101 123456") "2009-01-01 12:34:56";
192+
end
193+
185194
let () = test "Time.compact_duration" begin fun () ->
186195
let t n s =
187196
(* FIXME epsilon compare *)

time.ml

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,20 @@ let unsafe_digit n = Char.unsafe_chr (Char.code '0' + n)
2222
let put_2d s ofs n =
2323
Bytes.unsafe_set s ofs (unsafe_digit (n / 10));
2424
Bytes.unsafe_set s (ofs+1) (unsafe_digit (n mod 10))
25-
let replace_year_2019 s year =
26-
if year <> 2019 then
25+
26+
let replace_year_2020 s t =
27+
let year = t.Unix.tm_year + 1900 in
28+
if year <> 2020 then
2729
begin
28-
if year >= 2010 && year < 2020 then
30+
if year >= 2020 && year < 2030 then
2931
Bytes.unsafe_set s 3 (unsafe_digit (year mod 10))
3032
else
3133
Bytes.unsafe_blit (Bytes.unsafe_of_string @@ if year >= 1000 then string_of_int year else sprintf "%04u" year) 0 s 0 4
3234
end
3335

3436
let fast_to_string =
3537
(* "%04u-%02u-%02uT%02u:%02u:%02u%s" *)
36-
let template = "2019-__-__T__:__:__" in
38+
let template = "2020-__-__T__:__:__" in
3739
let template_z = template ^ "Z" in
3840
let last_time = ref 0 in
3941
let last_gmt = ref true in
@@ -45,7 +47,7 @@ let fast_to_string =
4547
let open Unix in
4648
let t = (if gmt then gmtime else localtime) f in
4749
let s = Bytes.of_string (if gmt then template_z else template) in
48-
replace_year_2019 s (t.tm_year + 1900);
50+
replace_year_2020 s t;
4951
put_2d s 5 (t.tm_mon+1);
5052
put_2d s 8 t.tm_mday;
5153
put_2d s 11 t.tm_hour;
@@ -72,45 +74,45 @@ let gmt_string_ms = to_string ~gmt:true ~ms:true
7274

7375
(** YYYY-MM-DD *)
7476
let format_date_w3 =
75-
let template = "2019-__-__" in
77+
let template = "2020-__-__" in
7678
fun t ->
7779
let open Unix in
7880
let s = Bytes.of_string template in
79-
replace_year_2019 s (t.tm_year + 1900);
81+
replace_year_2020 s t;
8082
put_2d s 5 (t.tm_mon+1);
8183
put_2d s 8 t.tm_mday;
8284
Bytes.unsafe_to_string s
8385

8486
(** YYYYMMDD *)
8587
let format_date8 =
86-
let template = "2019____" in
88+
let template = "2020____" in
8789
fun t ->
8890
let open Unix in
8991
let s = Bytes.of_string template in
90-
replace_year_2019 s (t.tm_year + 1900);
92+
replace_year_2020 s t;
9193
put_2d s 4 (t.tm_mon+1);
9294
put_2d s 6 t.tm_mday;
9395
Bytes.unsafe_to_string s
9496

9597
(** YYYYMMDDhh *)
9698
let format_date8h =
97-
let template = "2019______" in
99+
let template = "2020______" in
98100
fun t ->
99101
let open Unix in
100102
let s = Bytes.of_string template in
101-
replace_year_2019 s (t.tm_year + 1900);
103+
replace_year_2020 s t;
102104
put_2d s 4 (t.tm_mon+1);
103105
put_2d s 6 t.tm_mday;
104106
put_2d s 8 t.tm_hour;
105107
Bytes.unsafe_to_string s
106108

107109
(** YYYYMMDDhhmm *)
108110
let format_date8hm =
109-
let template = "2019________" in
111+
let template = "2020________" in
110112
fun t ->
111113
let open Unix in
112114
let s = Bytes.of_string template in
113-
replace_year_2019 s (t.tm_year + 1900);
115+
replace_year_2020 s t;
114116
put_2d s 4 (t.tm_mon+1);
115117
put_2d s 6 t.tm_mday;
116118
put_2d s 8 t.tm_hour;
@@ -119,11 +121,11 @@ let format_date8hm =
119121

120122
(** YYYYMMDDhhmmss *)
121123
let format_date8hms =
122-
let template = "2019__________" in
124+
let template = "2020__________" in
123125
fun t ->
124126
let open Unix in
125127
let s = Bytes.of_string template in
126-
replace_year_2019 s (t.tm_year + 1900);
128+
replace_year_2020 s t;
127129
put_2d s 4 (t.tm_mon+1);
128130
put_2d s 6 t.tm_mday;
129131
put_2d s 8 t.tm_hour;
@@ -132,12 +134,12 @@ let format_date8hms =
132134
Bytes.unsafe_to_string s
133135

134136
(** YYYY-MM-DD hh:mm:ss *)
135-
let format_date8hms =
136-
let template = "2019-__-__ __:__:__" in
137+
let format_basic =
138+
let template = "2020-__-__ __:__:__" in
137139
fun t ->
138140
let open Unix in
139141
let s = Bytes.of_string template in
140-
replace_year_2019 s (t.tm_year + 1900);
142+
replace_year_2020 s t;
141143
put_2d s 5 (t.tm_mon+1);
142144
put_2d s 8 t.tm_mday;
143145
put_2d s 11 t.tm_hour;

0 commit comments

Comments
 (0)