Module CalendarLib.Calendar

include Calendar_sig.S with module Date = Date and module Time = Time

Datatypes

module Date = Date

Date implementation used by this calendar.

module Time = Time

Time implementation used by this calendar.

type t
type day = Date.day =
| Sun
| Mon
| Tue
| Wed
| Thu
| Fri
| Sat

Days of the week.

type month = Date.month =
| Jan
| Feb
| Mar
| Apr
| May
| Jun
| Jul
| Aug
| Sep
| Oct
| Nov
| Dec

Months of the year.

type year = Date.year

Year as an int

type second = Time.second
type field = [
| Date.field
| Time.field
]

The different fields of a calendar.

Constructors

val make : int -> int -> int -> int -> int -> second -> t

make year month day hour minute second makes the calendar "year-month-day; hour-minute-second".

raises D.Out_of_bounds

when a date is outside the Julian period.

raises D.Undefined

when a date belongs to [October 5th, 1582; October 14th, 1582].

val lmake : year:int -> ?⁠month:int -> ?⁠day:int -> ?⁠hour:int -> ?⁠minute:int -> ?⁠second:second -> unit -> t

Labelled version of make. The default value of month and day (resp. of hour, minute and second) is 1 (resp. 0).

raises D.Out_of_bounds

when a date is outside the Julian period.

raises D.Undefined

when a date belongs to [October 5th, 1582; October 14th, 1582].

since
1.05
val create : Date.t -> Time.t -> t

create d t creates a calendar from the given date and time.

val now : unit -> t

now () returns the current date and time (in the current time zone).

val from_jd : float -> t

Return the Julian day. More precise than Date.from_jd: the fractional part represents the time.

val from_mjd : float -> t

Return the Modified Julian day. It is Julian day - 2 400 000.5 (more precise than Date.from_mjd).

Conversions

val convert : t -> Time_Zone.t -> Time_Zone.t -> t
see Time_sig.S.html#VALconvert

Time_sig.S.convert

val to_gmt : t -> t
see Time_sig.S.html#VALto_gmt

Time_sig.S.to_gmt

val from_gmt : t -> t
see Time_sig.S.html#VALfrom_gmt

Time_sig.S.from_gmt

Getters

val days_in_month : t -> int
see Date_sig.S.html#VALdays_in_month

Date_sig.S.days_in_month

val day_of_week : t -> day
see Date_sig.S.html#VALdays_of_week

Date_sig.S.days_of_week

val day_of_month : t -> int
see Date_sig.S.html#VALdays_of_month

Date_sig.S.days_of_month

val day_of_year : t -> int
see Date_sig.S.html#VALdays_of_year

Date_sig.S.days_of_year

val week : t -> int
see Date_sig.S.html#VALweek

Date_sig.S.week

val month : t -> month
see Date_sig.S.html#VALmonth

Date_sig.S.month

val year : t -> int
see Date_sig.S.html#VALyear

Date_sig.S.year

val to_jd : t -> float
val to_mjd : t -> float
val hour : t -> int
see Time_sig.S.html#VALhour

Time_sig.S.hour

val minute : t -> int
see Time_sig.S.html#VALminute

Time_sig.S.minute

val second : t -> second
see Time_sig.S.html#VALsecond

Time_sig.S.second

Calendars are comparable

val equal : t -> t -> bool

Equality function between two calendars.

see Utils.Comparable.html#VALequal

Utils.Comparable.equal.

val compare : t -> t -> int

Comparison function between two calendars.

see Utils.Comparable.html#VALcompare

Utils.Comparable.compare.

val hash : t -> int

Hash function for calendars.

see Utils.Comparable.html#VALhash

Utils.Comparable.hash.

since
2.0
val is_leap_day : t -> bool
see Date_sig.S.html#VALis_leap_day

Date_sig.S.is_leap_day

val is_gregorian : t -> bool
see Date_sig.S.html#VALis_gregorian

Date_sig.S.is_gregorian

val is_julian : t -> bool
see Date_sig.S.html#VALis_julian

Date_sig.S.is_julian

val is_pm : t -> bool
see Time_sig.S.html#VALis_pm

Time_sig.S.is_pm

val is_am : t -> bool
see Time_sig.S.html#VALis_am

Time_sig.S.is_am

Coercions

val to_unixtm : t -> Unix.tm

Convert a calendar into the unix.tm type. The field isdst is always false. More precise than Date_sig.S.to_unixtm.

since
1.01
val from_unixtm : Unix.tm -> t

Inverse of to_unixtm. Assumes the current time zone. So, The following invariant holds: hour (from_unixtm u) = u.Unix.tm_hour.

since
1.01
val to_unixfloat : t -> float

Convert a calendar to a float such than to_unixfloat (make 1970 1 1 0 0 0) returns 0.0 at UTC. So such a float is convertible with those of the module Unix. More precise than Date_sig.S.to_unixfloat.

since
1.01
val from_unixfloat : float -> t

Inverse of to_unixfloat. Assumes the current time zone. So, the following invariant holds: hour (from_unixfloat u) = (Unix.gmtime u).Unix.tm_hour.

since
1.01
val from_date : Date.t -> t

Convert a date to a calendar. The time is midnight in the current time zone.

val to_date : t -> Date.t

Convert a calendar to a date. Time part of the calendar is ignored.

val to_time : t -> Time.t

Convert a calendar to a time. Date part of the calendar is ignored.

since
1.03

Period

module Period : sig ... end

A period is the number of seconds between two calendars.

Arithmetic operations on calendars and periods

val add : t -> 'a Period.period -> t
see Date_sig.S.html#VALadd

Date_sig.S.add

val sub : t -> t -> [> `Week | `Day ] Period.period
see Date_sig.S.html#VALsub

Date_sig.S.sub

val precise_sub : t -> t -> Period.t
see Date_sig.S.html#VALprecise_sub

Date_sig.S.precise_sub

since
2.03
val rem : t -> 'a Period.period -> t
see Date_sig.S.html#VALrem

Date_sig.S.rem

val next : t -> field -> t
see Date_sig.S.html#VALnext

Date_sig.S.next

val prev : t -> field -> t
see Date_sig.S.html#VALprev

Date_sig.S.prev

module Precise : Calendar_sig.S with module Date = Date and module Time = Time

More precise implementation of calendar in which seconds are integer.