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