sig
  type t
  and day = Sun | Mon | Tue | Wed | Thu | Fri | Sat
  and month =
      Jan
    | Feb
    | Mar
    | Apr
    | May
    | Jun
    | Jul
    | Aug
    | Sep
    | Oct
    | Nov
    | Dec
  and field = [ `Day | `Month | `Week | `Year ]
  exception Out_of_bounds
  exception Undefined
  val make : int -> int -> int -> Date.t
  val lmake : year:int -> ?month:int -> ?day:int -> unit -> Date.t
  val today : unit -> Date.t
  val from_jd : int -> Date.t
  val from_mjd : int -> Date.t
  val days_in_month : Date.t -> int
  val day_of_week : Date.t -> Date.day
  val day_of_month : Date.t -> int
  val day_of_year : Date.t -> int
  val week : Date.t -> int
  val month : Date.t -> Date.month
  val year : Date.t -> int
  val to_jd : Date.t -> int
  val to_mjd : Date.t -> int
  val compare : Date.t -> Date.t -> int
  val is_leap_day : Date.t -> bool
  val is_gregorian : Date.t -> bool
  val is_julian : Date.t -> bool
  val to_unixtm : Date.t -> Unix.tm
  val from_unixtm : Unix.tm -> Date.t
  val to_unixfloat : Date.t -> float
  val from_unixfloat : float -> Date.t
  val int_of_day : Date.day -> int
  val day_of_int : int -> Date.day
  val int_of_month : Date.month -> int
  val month_of_int : int -> Date.month
  module Period :
    sig
      type t
      val empty : t
      val add : t -> t -> t
      val sub : t -> t -> t
      val opp : t -> t
      val compare : t -> t -> int
      val make : int -> int -> int -> Date.t
      val lmake : ?year:int -> ?month:int -> ?day:int -> unit -> Date.t
      val year : int -> Date.t
      val month : int -> Date.t
      val week : int -> Date.t
      val day : int -> Date.t
      exception Not_computable
      val nb_days : Date.t -> int
    end
  val add : Date.t -> Date.Period.t -> Date.t
  val sub : Date.t -> Date.t -> Date.Period.t
  val rem : Date.t -> Date.Period.t -> Date.t
  val next : Date.t -> Date.field -> Date.t
  val prev : Date.t -> Date.field -> Date.t
  val is_leap_year : int -> bool
  val same_calendar : int -> int -> bool
  val days_in_year : int -> int
  val weeks_in_year : int -> int
  val century : int -> int
  val millenium : int -> int
  val solar_number : int -> int
  val indiction : int -> int
  val golden_number : int -> int
  val epact : int -> int
  val easter : int -> Date.t
end