sig
  type t
  module Date : Date_sig.S
  module Time : Time_sig.S
  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 second = Time.second
  type field = [ `Day | `Hour | `Minute | `Month | `Second | `Week | `Year ]
  val make :
    int ->
    int -> int -> int -> int -> Calendar_sig.S.second -> Calendar_sig.S.t
  val lmake :
    year:int ->
    ?month:int ->
    ?day:int ->
    ?hour:int ->
    ?minute:int -> ?second:Calendar_sig.S.second -> unit -> Calendar_sig.S.t
  val create : Date.t -> Time.t -> Calendar_sig.S.t
  val now : unit -> Calendar_sig.S.t
  val from_jd : float -> Calendar_sig.S.t
  val from_mjd : float -> Calendar_sig.S.t
  val convert :
    Calendar_sig.S.t -> Time_Zone.t -> Time_Zone.t -> Calendar_sig.S.t
  val to_gmt : Calendar_sig.S.t -> Calendar_sig.S.t
  val from_gmt : Calendar_sig.S.t -> Calendar_sig.S.t
  val days_in_month : Calendar_sig.S.t -> int
  val day_of_week : Calendar_sig.S.t -> Calendar_sig.S.day
  val day_of_month : Calendar_sig.S.t -> int
  val day_of_year : Calendar_sig.S.t -> int
  val week : Calendar_sig.S.t -> int
  val month : Calendar_sig.S.t -> Calendar_sig.S.month
  val year : Calendar_sig.S.t -> int
  val to_jd : Calendar_sig.S.t -> float
  val to_mjd : Calendar_sig.S.t -> float
  val hour : Calendar_sig.S.t -> int
  val minute : Calendar_sig.S.t -> int
  val second : Calendar_sig.S.t -> Calendar_sig.S.second
  val equal : Calendar_sig.S.t -> Calendar_sig.S.t -> bool
  val compare : Calendar_sig.S.t -> Calendar_sig.S.t -> int
  val hash : Calendar_sig.S.t -> int
  val is_leap_day : Calendar_sig.S.t -> bool
  val is_gregorian : Calendar_sig.S.t -> bool
  val is_julian : Calendar_sig.S.t -> bool
  val is_pm : Calendar_sig.S.t -> bool
  val is_am : Calendar_sig.S.t -> bool
  val to_unixtm : Calendar_sig.S.t -> Unix.tm
  val from_unixtm : Unix.tm -> Calendar_sig.S.t
  val to_unixfloat : Calendar_sig.S.t -> float
  val from_unixfloat : float -> Calendar_sig.S.t
  val from_date : Date.t -> Calendar_sig.S.t
  val to_date : Calendar_sig.S.t -> Date.t
  val to_time : Calendar_sig.S.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 equal : t -> t -> bool
      val compare : t -> t -> int
      val hash : t -> int
      val make :
        int ->
        int -> int -> int -> int -> Calendar_sig.S.second -> Calendar_sig.S.t
      val lmake :
        ?year:int ->
        ?month:int ->
        ?day:int ->
        ?hour:int ->
        ?minute:int ->
        ?second:Calendar_sig.S.second -> unit -> Calendar_sig.S.t
      val year : int -> Calendar_sig.S.t
      val month : int -> Calendar_sig.S.t
      val week : int -> Calendar_sig.S.t
      val day : int -> Calendar_sig.S.t
      val hour : int -> Calendar_sig.S.t
      val minute : int -> Calendar_sig.S.t
      val second : Calendar_sig.S.second -> Calendar_sig.S.t
      val from_date : Date.Period.t -> Calendar_sig.S.t
      val from_time : Time.Period.t -> Calendar_sig.S.t
      val to_date : Calendar_sig.S.t -> Date.Period.t
      exception Not_computable
      val to_time : Calendar_sig.S.t -> Time.Period.t
      val ymds : Calendar_sig.S.t -> int * int * int * Calendar_sig.S.second
    end
  val add : Calendar_sig.S.t -> Calendar_sig.S.Period.t -> Calendar_sig.S.t
  val sub : Calendar_sig.S.t -> Calendar_sig.S.t -> Calendar_sig.S.Period.t
  val rem : Calendar_sig.S.t -> Calendar_sig.S.Period.t -> Calendar_sig.S.t
  val next : Calendar_sig.S.t -> Calendar_sig.S.field -> Calendar_sig.S.t
  val prev : Calendar_sig.S.t -> Calendar_sig.S.field -> Calendar_sig.S.t
end