sig
  type t
  type day = Date.day = Sun | Mon | Tue | Wed | Thu | Fri | Sat
  type month =
    Date.month =
      Jan
    | Feb
    | Mar
    | Apr
    | May
    | Jun
    | Jul
    | Aug
    | Sep
    | Oct
    | Nov
    | Dec
  type year = Date.year
  type field = [ `Day | `Hour | `Minute | `Month | `Second | `Week | `Year ]
  val make : int -> int -> int -> int -> int -> int -> Calendar.t
  val lmake :
    year:int ->
    ?month:int ->
    ?day:int -> ?hour:int -> ?minute:int -> ?second:int -> unit -> Calendar.t
  val create : Date.t -> Time.t -> Calendar.t
  val now : unit -> Calendar.t
  val from_jd : float -> Calendar.t
  val from_mjd : float -> Calendar.t
  val convert : Calendar.t -> Time_Zone.t -> Time_Zone.t -> Calendar.t
  val to_gmt : Calendar.t -> Calendar.t
  val from_gmt : Calendar.t -> Calendar.t
  val days_in_month : Calendar.t -> int
  val day_of_week : Calendar.t -> Calendar.day
  val day_of_month : Calendar.t -> int
  val day_of_year : Calendar.t -> int
  val week : Calendar.t -> int
  val month : Calendar.t -> Calendar.month
  val year : Calendar.t -> int
  val to_jd : Calendar.t -> float
  val to_mjd : Calendar.t -> float
  val hour : Calendar.t -> int
  val minute : Calendar.t -> int
  val second : Calendar.t -> int
  val equal : Calendar.t -> Calendar.t -> bool
  val compare : Calendar.t -> Calendar.t -> int
  val is_leap_day : Calendar.t -> bool
  val is_gregorian : Calendar.t -> bool
  val is_julian : Calendar.t -> bool
  val is_pm : Calendar.t -> bool
  val is_am : Calendar.t -> bool
  val to_unixtm : Calendar.t -> Unix.tm
  val from_unixtm : Unix.tm -> Calendar.t
  val to_unixfloat : Calendar.t -> float
  val from_unixfloat : float -> Calendar.t
  val from_date : Date.t -> Calendar.t
  val to_date : Calendar.t -> Date.t
  val to_time : Calendar.t -> Time.t
  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 equal : t -> t -> bool
      val make : int -> int -> int -> int -> int -> int -> Calendar.t
      val lmake :
        ?year:int ->
        ?month:int ->
        ?day:int ->
        ?hour:int -> ?minute:int -> ?second:int -> unit -> Calendar.t
      val year : int -> Calendar.t
      val month : int -> Calendar.t
      val week : int -> Calendar.t
      val day : int -> Calendar.t
      val hour : int -> Calendar.t
      val minute : int -> Calendar.t
      val second : int -> Calendar.t
      val from_date : Date.Period.t -> Calendar.t
      val from_time : Time.Period.t -> Calendar.t
      val to_date : Calendar.t -> Date.Period.t
      exception Not_computable
      val to_time : Calendar.t -> Time.Period.t
      val ymds : Calendar.t -> int * int * int * int
    end
  val add : Calendar.t -> Calendar.Period.t -> Calendar.t
  val sub : Calendar.t -> Calendar.t -> Calendar.Period.t
  val rem : Calendar.t -> Calendar.Period.t -> Calendar.t
  val next : Calendar.t -> Calendar.field -> Calendar.t
  val prev : Calendar.t -> Calendar.field -> Calendar.t
end