From 0e12f44db931970a95c9dc3dde3ffbe1c8df6827 Mon Sep 17 00:00:00 2001 From: John Whitington Date: Wed, 2 Dec 2020 16:19:06 +0000 Subject: [PATCH] more --- cpdfstrftime.ml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/cpdfstrftime.ml b/cpdfstrftime.ml index 0b1eb6d..26cff27 100644 --- a/cpdfstrftime.ml +++ b/cpdfstrftime.ml @@ -108,6 +108,12 @@ let debug_str s = let utf8_of_utf16le s = implode (drop_evens (tl (tl (explode s)))) +let year_day d m y = + let n1 = 275 * m / 9 in + let n2 = (m + 9) / 12 in + let n3 = 1 + (y - 4 * (y / 4) + 2) / 3 in + n1 - n2 * n3 + d - 30 + let return_date () = match Sys.os_type with "Unix" -> @@ -128,7 +134,7 @@ let return_date () = _tm_wday = get_int 20 1; _tm_yday = get_int 22 3 - 1; _tm_isdst = false} - | "Windows" | "Cygwin" -> + | "Win32" | "Cygwin" -> (* Run 'wmic os get LocalDateTime' (exists on XP Pro or later, Vista or later). *) let get_int r o l = int_of_string (String.sub r o l) in let tempfile = Filename.temp_file "cpdf" "strftime" in @@ -146,14 +152,17 @@ let return_date () = let r2 = contents_of_file tempfile in Sys.remove tempfile; let r2 = utf8_of_utf16le r2 in + let day = get_int r 35 2 in + let month = get_int r 33 2 in + let year = get_int r 29 4 in {_tm_sec = get_int r 41 2; _tm_min = get_int r 39 2; _tm_hour = get_int r 37 2; - _tm_mday = get_int r 35 2; - _tm_mon = get_int r 33 2; - _tm_year = get_int r 29 4; + _tm_mday = day; + _tm_mon = month; + _tm_year = year; _tm_wday = get_int r2 13 1; - _tm_yday = 0; (* FIXME Must calculate from DD MM YYYY using standard formulae *) + _tm_yday = year_day day month year; _tm_isdst = false} | _ -> failwith "Unknown Sys.os_type in Cpdfstrftime.return_date"