Module Core_kernel__.Ofday

include Core_kernel__.Ofday_intf.Ofday with type underlying = float and module Span := Core_kernel__.Span
include Core_kernel__.Ofday_intf.S
type underlying

Time of day.

t represents a clock-face time of day. Usually this is equivalent to a time-offset from midnight, and each t occurs exactly once in each calendar day. However, when daylight saving time begins or ends, some clock face times (and therefore t's) can occur more than once per day or not at all, and e.g. 04:00 can occur three or five hours after midnight, so knowing your current offset from midnight is *not* in general equivalent to knowing the current t.

(See Zone for tools to help you cope with DST.)

There is one nonstandard representable value, start_of_next_day, which can be thought of as "24:00:00" in 24-hour time. It is essentially "00:00:00" on the next day. By having this value, we allow comparisons against a strict upper bound on t values. However, it has some odd properties; for example, Time.of_date_ofday ~zone date start_of_next_day |> Time.to_date ~zone yields a different date.

Any ofday will satisfy start_of_day <= ofday <= start_of_next_day.

type t = private underlying
include sig ... end
val bin_read_t : t Bin_prot.Read.reader
val __bin_read_t__ : (Core_kernel__.Import.int ‑> t) Bin_prot.Read.reader
val bin_reader_t : t Bin_prot.Type_class.reader
val bin_size_t : t Bin_prot.Size.sizer
val bin_write_t : t Bin_prot.Write.writer
val bin_writer_t : t Bin_prot.Type_class.writer
val bin_shape_t : Bin_prot.Shape.t
val t_of_sexp : Base.Sexp.t ‑> t
val sexp_of_t : t ‑> Base.Sexp.t
include Core_kernel__.Std_internal.Comparable_binable with type t := t
include Core_kernel__.Comparable_intf.S_common
include Base.Comparable.S
include Base__.Comparable_intf.Polymorphic_compare
include Base.Comparisons.Infix
type t
val (>=) : t ‑> t ‑> bool
val (<=) : t ‑> t ‑> bool
val (=) : t ‑> t ‑> bool
val (>) : t ‑> t ‑> bool
val (<) : t ‑> t ‑> bool
val (<>) : t ‑> t ‑> bool
val equal : t ‑> t ‑> bool
val compare : t ‑> t ‑> int

compare t1 t2 returns 0 if t1 is equal to t2, a negative integer if t1 is less than t2, and a positive integer if t1 is greater than t2.

val min : t ‑> t ‑> t
val max : t ‑> t ‑> t
val ascending : t ‑> t ‑> int

ascending is identical to compare. descending x y = ascending y x. These are intended to be mnemonic when used like List.sort ~compare:ascending and List.sort ~cmp:descending, since they cause the list to be sorted in ascending or descending order, respectively.

val descending : t ‑> t ‑> int
val between : t ‑> low:t ‑> high:t ‑> bool

between t ~low ~high means low <= t <= high

val clamp_exn : t ‑> min:t ‑> max:t ‑> t

clamp_exn t ~min ~max returns t', the closest value to t such that between t' ~low:min ~high:max is true.

Raises if not (min <= max).

val clamp : t ‑> min:t ‑> max:t ‑> t Base.Or_error.t
include Base.Comparator.S with type t := t
type t
type comparator_witness
include Base__.Comparable_intf.Validate with type t := t
type t
val validate_lbound : min:t Base.Maybe_bound.t ‑> t Base.Validate.check
val validate_ubound : max:t Base.Maybe_bound.t ‑> t Base.Validate.check
val validate_bound : min:t Base.Maybe_bound.t ‑> max:t Base.Maybe_bound.t ‑> t Base.Validate.check
include Core_kernel.Comparable.With_zero with type t := t
type t
val validate_positive : t Base.Validate.check
val validate_non_negative : t Base.Validate.check
val validate_negative : t Base.Validate.check
val validate_non_positive : t Base.Validate.check
val is_positive : t ‑> bool
val is_non_negative : t ‑> bool
val is_negative : t ‑> bool
val is_non_positive : t ‑> bool
val sign : t ‑> Base__.Sign0.t

Returns Neg, Zero, or Pos in a way consistent with the above functions.

include Core_kernel__.Std_internal.Hashable_binable with type t := t
type t
include sig ... end
val hash_fold_t : Base.Hash.state ‑> t ‑> Base.Hash.state
val hash : t ‑> Base.Hash.hash_value
include Core_kernel__.Import.Pretty_printer.S with type t := t
type t
val pp : Base.Formatter.t ‑> t ‑> unit
include Core_kernel__.Std_internal.Robustly_comparable with type t := t
type t
val (>=.) : t ‑> t ‑> bool
val (<=.) : t ‑> t ‑> bool
val (=.) : t ‑> t ‑> bool
val (>.) : t ‑> t ‑> bool
val (<.) : t ‑> t ‑> bool
val (<>.) : t ‑> t ‑> bool
val robustly_compare : t ‑> t ‑> int

of_string supports and correctly interprets 12h strings with the following suffixes:

      "A", "AM", "A.M.", "A.M"
      "P", "PM", "P.M.", "P.M"

as well as the lowercase and space-prefixed versions of these suffixes.

of_string also fully supports 24h wall-clock times.

to_string only produces the 24h format.

include Core_kernel__.Std_internal.Stringable with type t := t
type t
val of_string : string ‑> t
val to_string : t ‑> string
val to_parts : t ‑> Span.Parts.t
val start_of_day : t

Smallest valid ofday.

val start_of_next_day : t

Largest representable ofday; see notes above on how start_of_next_day behaves differently from other ofday values.

val approximate_end_of_day : t

A time very close to the end of a day. Not necessarily the largest representable value before start_of_next_day, but as close as possible such that using this ofday with Time.of_date_ofday and Time.to_date should round-trip to the same date. With floating-point representations of time, this may not be possible for dates extremely far from epoch.

The clock-face time represented by approximate_end_of_day may vary with different time and ofday representations, depending on their precision.

val to_span_since_start_of_day : t ‑> Span.t

Note that these names are only really accurate on days without DST transitions. When clocks move forward or back, of_span_since_start_of_day s will not necessarily occur s after that day's midnight.

val of_span_since_start_of_day : Span.t ‑> t

add t s shifts the time of day t by the span s. It returns None if the result is not in the same 24-hour day.

next t return the next t (next t > t) or None if t = end of day.

prev t return the previous t (prev t < t) or None if t = start of day.

val diff : t ‑> t ‑> Span.t

diff t1 t2 returns the difference in time between two ofdays, as if they occurred on the same 24-hour day.

val small_diff : t ‑> t ‑> Span.t

Returns the time-span separating the two of-days, ignoring the hour information, and assuming that the of-days represent times that are within a half-hour of each other. This is useful for comparing two ofdays in unknown time-zones.

val to_string_trimmed : t ‑> Core_kernel__.Import.string

Trailing groups of zeroes are trimmed such that the output is printed in terms of the smallest non-zero units among nanoseconds, microseconds, milliseconds, or seconds; or minutes if all of the above are zero.

val to_sec_string : t ‑> Core_kernel__.Import.string

HH:MM:SS, without any subsecond components. Seconds appear even if they are zero.

val of_string_iso8601_extended : ?⁠pos:Core_kernel__.Import.int ‑> ?⁠len:Core_kernel__.Import.int ‑> Core_kernel__.Import.string ‑> t
val to_millisec_string : t ‑> Core_kernel__.Import.string

with milliseconds