`type t =`

1. `| UTC`
   (*

   Greenwich Meridian Time

   *)
2. `| Local`
   (*

   Local Time

   *)
3. `| UTC_Plus of int`
   (*

   Another time zone specified from UTC

   *)

Type of a time zone.

`val current : unit -> t`

Return the current time zone. It is `UTC` before any change.

`val change : t -> unit`

Change the current time zone by another one. Raise `Invalid_argument` if the specified time zone is `UTC_Plus x` with `x < -12` or `x > 11`

`val gap : t -> t -> int`

Return the gap between two time zone. @example `gap UTC (UTC_Plus 5)` returns 5 and, at Paris in summer, `gap Local UTC` returns -2.

`val from_gmt : unit -> int`

`from_gmt ()` is equivalent to `gap UTC (current ())`.

`val to_gmt : unit -> int`

`to_gmt ()` is equivalent to `gap (current ()) UTC`.

`val is_dst : unit -> bool`

`is_dst ()` checks if daylight saving time is in effect. Only relevant in local time. Returns alway `false` in another time zone.

- since 1.09.4

`val hour_of_dst : unit -> int`

`hour_of_dst ()` returns `1` if `is_dst ()` and `0` otherwise.

- since 1.09.4

`val on : ('a -> 'b) -> t -> 'a -> 'b`

`on f tz x` changes the time zone to `tz`, then computes `f x`, and finally reset the time zone to the initial one and returns the result of the computation.

- since 2.0