time_test.ml 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. let test_ptime () =
  2. (* How would I get the timezone offset for a given Timezone (e.g. local or
  3. Europe/Amsterdam at a given datetime? *)
  4. let str0 = "2021-09-28T09:25:00+02:00" in
  5. match Ptime.of_rfc3339 str0 with
  6. | Ok (t0, Some tz_s, 25) -> (
  7. assert (str0 = Ptime.to_rfc3339 ~tz_offset_s:tz_s t0);
  8. match Ptime.of_rfc3339 "2021-09-28T09:37:00+02:00" with
  9. | Ok (t1, Some 7200, 25) ->
  10. let dt = Ptime.to_float_s t1 -. Ptime.to_float_s t0 in
  11. assert (12.0 *. 60.0 = dt)
  12. | _ -> assert false)
  13. | _ -> assert false
  14. let test_timedesc () =
  15. (* let tzV = Option.get (Timedesc.Time_zone.local ()) in
  16. assert ("Europe/Vienna" = Timedesc.Time_zone.name tzV); *)
  17. let tz = Timedesc.Time_zone.make_exn "Europe/Zurich" in
  18. assert ("Europe/Zurich" = Timedesc.Time_zone.name tz);
  19. let t0 =
  20. Timedesc.make_exn ~tz ~year:2021 ~month:9 ~day:21 ~hour:9 ~minute:11
  21. ~second:0 ()
  22. and t1 =
  23. Timedesc.make_exn ~tz ~year:2021 ~month:9 ~day:21 ~hour:9 ~minute:17
  24. ~second:0 ()
  25. in
  26. assert ("2021-09-21T09:11:00+02:00" = Option.get (Timedesc.to_rfc3339 t0));
  27. assert ("2021-09-21T09:17:00+02:00" = Option.get (Timedesc.to_rfc3339 t1));
  28. let dt =
  29. Timedesc.to_timestamp_float_s_single t1
  30. -. Timedesc.to_timestamp_float_s_single t0
  31. in
  32. assert (6.0 *. 60.0 = dt)
  33. let test_zoneless_to_zoned () =
  34. let tz = Timedesc.Time_zone.make_exn "Europe/Zurich"
  35. and t = Timedesc.Time.make_exn ~hour:1 ~minute:2 ~second:3 ()
  36. and d0 = Timedesc.Date.of_iso8601_exn "2021-09-28" in
  37. let zl0 = Timedesc.Zoneless.make d0 t in
  38. let zo0 = Result.get_ok (Timedesc.Zoneless.to_zoned ~tz zl0) in
  39. assert ("2021-09-28T01:02:03+02:00" = Option.get (Timedesc.to_rfc3339 zo0));
  40. let d1 = Timedesc.Date.of_iso8601_exn "2021-12-28" in
  41. let zl1 = Timedesc.Zoneless.make d1 t in
  42. let zo1 = Result.get_ok (Timedesc.Zoneless.to_zoned ~tz zl1) in
  43. assert ("2021-12-28T01:02:03+01:00" = Option.get (Timedesc.to_rfc3339 zo1))
  44. let test_foo () = assert true
  45. let () =
  46. test_ptime ();
  47. test_timedesc ();
  48. test_zoneless_to_zoned ();
  49. test_foo ()