sig
  type t
  type field = [ `Hour | `Minute | `Second ]
  type second
  module Second :
    sig
      type t = second
      val from_int : int -> t
      val from_float : float -> t
      val to_int : t -> int
      val to_float : t -> float
    end
  val make : int -> int -> Time_sig.S.second -> Time_sig.S.t
  val lmake :
    ?hour:int ->
    ?minute:int -> ?second:Time_sig.S.second -> unit -> Time_sig.S.t
  val now : unit -> Time_sig.S.t
  val midnight : unit -> Time_sig.S.t
  val midday : unit -> Time_sig.S.t
  val convert : Time_sig.S.t -> Time_Zone.t -> Time_Zone.t -> Time_sig.S.t
  val from_gmt : Time_sig.S.t -> Time_sig.S.t
  val to_gmt : Time_sig.S.t -> Time_sig.S.t
  val normalize : Time_sig.S.t -> Time_sig.S.t * int
  val hour : Time_sig.S.t -> int
  val minute : Time_sig.S.t -> int
  val second : Time_sig.S.t -> Time_sig.S.second
  val to_seconds : Time_sig.S.t -> Time_sig.S.second
  val to_minutes : Time_sig.S.t -> float
  val to_hours : Time_sig.S.t -> float
  val equal : Time_sig.S.t -> Time_sig.S.t -> bool
  val compare : Time_sig.S.t -> Time_sig.S.t -> int
  val hash : Time_sig.S.t -> int
  val is_pm : Time_sig.S.t -> bool
  val is_am : Time_sig.S.t -> bool
  val from_seconds : Time_sig.S.second -> Time_sig.S.t
  val from_minutes : float -> Time_sig.S.t
  val from_hours : float -> Time_sig.S.t
  module Period :
    sig
      type +'a period constraint 'a = [< Period.date_field ]
      type t = Period.date_field period
      val empty : [< Period.date_field ] period
      val add :
        ([< Period.date_field ] as 'a) period -> 'a period -> 'a period
      val sub :
        ([< Period.date_field ] as 'a) period -> 'a period -> 'a period
      val opp : ([< Period.date_field ] as 'a) period -> 'a period
      val equal :
        [< Period.date_field ] period ->
        [< Period.date_field ] period -> bool
      val compare :
        [< Period.date_field ] period -> [< Period.date_field ] period -> int
      val hash : [< Period.date_field ] period -> int
      val length : [< Period.date_field ] period -> Time_sig.S.second
      val mul :
        ([< Period.date_field ] as 'a) period -> 'a period -> 'a period
      val div :
        ([< Period.date_field ] as 'a) period -> 'a period -> 'a period
      val make :
        int -> int -> Time_sig.S.second -> [< Period.date_field ] period
      val lmake :
        ?hour:int ->
        ?minute:int ->
        ?second:Time_sig.S.second -> unit -> [< Period.date_field ] period
      val hour : int -> [< Period.date_field ] period
      val minute : int -> [< Period.date_field ] period
      val second : Time_sig.S.second -> [< Period.date_field ] period
      val to_seconds : [< Period.date_field ] period -> Time_sig.S.second
      val to_minutes : [< Period.date_field ] period -> float
      val to_hours : [< Period.date_field ] period -> float
    end
  val add :
    Time_sig.S.t ->
    [< Period.date_field ] Time_sig.S.Period.period -> Time_sig.S.t
  val sub :
    Time_sig.S.t ->
    Time_sig.S.t -> [< Period.date_field ] Time_sig.S.Period.period
  val rem :
    Time_sig.S.t ->
    [< Period.date_field ] Time_sig.S.Period.period -> Time_sig.S.t
  val next : Time_sig.S.t -> Time_sig.S.field -> Time_sig.S.t
  val prev : Time_sig.S.t -> Time_sig.S.field -> Time_sig.S.t
end