sig
  type t
  type field = [ `Hour | `Minute | `Second ]
  val make : int -> int -> int -> Time.t
  val lmake : ?hour:int -> ?minute:int -> ?second:int -> unit -> Time.t
  val now : unit -> Time.t
  val midnight : unit -> Time.t
  val midday : unit -> Time.t
  val convert : Time.t -> Time_Zone.t -> Time_Zone.t -> Time.t
  val from_gmt : Time.t -> Time.t
  val to_gmt : Time.t -> Time.t
  val normalize : Time.t -> Time.t * int
  val hour : Time.t -> int
  val minute : Time.t -> int
  val second : Time.t -> int
  val to_seconds : Time.t -> int
  val to_minutes : Time.t -> float
  val to_hours : Time.t -> float
  val compare : Time.t -> Time.t -> int
  val is_pm : Time.t -> bool
  val is_am : Time.t -> bool
  val from_seconds : int -> Time.t
  val from_minutes : float -> Time.t
  val from_hours : float -> 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 length : Time.t -> int
      val mul : Time.t -> Time.t -> Time.t
      val div : Time.t -> Time.t -> Time.t
      val make : int -> int -> int -> Time.t
      val lmake : ?hour:int -> ?minute:int -> ?second:int -> unit -> Time.t
      val hour : int -> Time.t
      val minute : int -> Time.t
      val second : int -> Time.t
      val to_seconds : Time.t -> int
      val to_minutes : Time.t -> float
      val to_hours : Time.t -> float
    end
  val add : Time.t -> Time.Period.t -> Time.t
  val sub : Time.t -> Time.t -> Time.Period.t
  val rem : Time.t -> Time.Period.t -> Time.t
  val next : Time.t -> Time.field -> Time.t
  val prev : Time.t -> Time.field -> Time.t
end