···
let ptime_of_ical = function
| `Datetime (`Utc t) -> t
| `Datetime (`Local t) ->
372
-
match Timedesc.Time_zone.local () with
374
-
| None -> Timedesc.Time_zone.utc
371
+
let tz = Timedesc.Time_zone.local_exn () in
let ts = Timedesc.Utils.timestamp_of_ptime t in
373
+
(* Icalendar gives us the Ptime in UTC, which we parse to a Timedesc *)
378
-
match Timedesc.of_timestamp ~tz_of_date_time:system_tz ts with
380
-
| None -> failwith "Invalid local date conversion"
375
+
Timedesc.of_timestamp_exn ~tz_of_date_time:Timedesc.Time_zone.utc ts
377
+
(* We extract the datetime, and reinterpret it in the appropriate timezone *)
378
+
let date = Timedesc.date dt in
379
+
let time = Timedesc.time dt in
380
+
let dt = Timedesc.of_date_and_time_exn ~tz date time in
| `Datetime (`With_tzid (t, (_, tzid))) ->
385
-
match Timedesc.Time_zone.make tzid with
390
-
"Warning: Unknown timezone %s, falling back to UTC\n" tzid)
383
+
let tz = Timedesc.Time_zone.make_exn tzid in
384
+
(* Icalendar gives us the Ptime in UTC, which we parse to a Timedesc *)
let ts = Timedesc.Utils.timestamp_of_ptime t in
394
-
match Timedesc.of_timestamp ~tz_of_date_time:tz ts with
396
-
| None -> failwith "Invalid timezone date conversion"
387
+
Timedesc.of_timestamp_exn ~tz_of_date_time:Timedesc.Time_zone.utc ts
389
+
(* We extract the datetime, and reinterpret it in the appropriate timezone *)
390
+
let date = Timedesc.date dt in
391
+
let time = Timedesc.time dt in
392
+
let dt = Timedesc.of_date_and_time_exn ~tz date time in