Title here
Summary here
Our program demonstrates time formatting and parsing in OCaml. Here’s the full source code:
open Unix
let () =
let p = print_endline in
(* Here's a basic example of formatting a time *)
let t = gettimeofday () in
p (Printf.sprintf "%.0f" t);
(* Time parsing uses string manipulation in OCaml *)
let t1 = Unix.gmtime (Unix.timegm (Unix.strptime "2012-11-01T22:08:41+00:00" "%Y-%m-%dT%H:%M:%S%z")) in
p (Printf.sprintf "%s" (Unix.mktime t1 |> snd |> Unix.gmtime |> Unix.string_of_tm));
(* Custom time formatting *)
let custom_format tm format =
format
|> Str.global_replace (Str.regexp "%H") (Printf.sprintf "%02d" tm.tm_hour)
|> Str.global_replace (Str.regexp "%M") (Printf.sprintf "%02d" tm.tm_min)
|> Str.global_replace (Str.regexp "%Y") (string_of_int (tm.tm_year + 1900))
|> Str.global_replace (Str.regexp "%m") (Printf.sprintf "%02d" (tm.tm_mon + 1))
|> Str.global_replace (Str.regexp "%d") (Printf.sprintf "%02d" tm.tm_mday)
in
let now = Unix.localtime (Unix.time ()) in
p (custom_format now "%H:%M");
p (custom_format now "%a %b %d %H:%M:%S %Y");
(* For purely numeric representations you can use Printf *)
Printf.printf "%d-%02d-%02dT%02d:%02d:%02d-00:00\n"
(now.tm_year + 1900) (now.tm_mon + 1) now.tm_mday
now.tm_hour now.tm_min now.tm_sec;
(* Parsing will raise an exception on malformed input *)
try
let _ = Unix.strptime "8:41PM" "%I:%M%p" in
p "Parsing succeeded"
with
| Unix.Unix_error(_, _, _) -> p "Parsing failed"
To run the program, save it as time_formatting_parsing.ml
and use ocamlc
to compile it:
$ ocamlc -o time_formatting_parsing unix.cma str.cma time_formatting_parsing.ml
$ ./time_formatting_parsing
1620000000
Thu Nov 1 22:08:41 2012
18:30
Wed May 3 18:30:00 2023
2023-05-03T18:30:00-00:00
Parsing failed
In this OCaml version:
Unix
module for time operations.Printf.sprintf
and custom formatting functions.Unix.strptime
which is similar to the Go time.Parse
function.Printf.printf
similar to the Go version.Note that OCaml’s standard library doesn’t have as rich time formatting capabilities as Go, so we’ve implemented some custom formatting. For more complex time operations, you might want to use a third-party library like calendar
or ptime
.