blob: b684d612dc1f8777cedcf8b5f8c5c3ff4f8bafa1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
(** Proleptic Gregorian calendar dates over the supported domain 1583..9999.
[t] is opaque; the internal representation is a day-count (rata die) so
arithmetic and comparison are total and cheap. *)
type t
type weekday = Sun | Mon | Tue | Wed | Thu | Fri | Sat
(** [make ~year ~month ~day] validates the date; rejects a month/day out of
range and any year outside 1583..9999. *)
val make : year:int -> month:int -> day:int -> (t, string) result
val year : t -> int
val month : t -> int
val day : t -> int
val weekday : t -> weekday
(** [to_rata]/[of_rata] expose the underlying day-count (days since 1970-01-01);
[of_rata] and [add_days] are unbounded total arithmetic (they may denote a
year outside 1583..9999 — only [make] enforces the domain). *)
val to_rata : t -> int
val of_rata : int -> t
val add_days : t -> int -> t
val compare : t -> t -> int
|