### Datatypes

`module Date = Date`

Date implementation used by this calendar.

`module Time = Ftime`

Time implementation used by this calendar.

`type t`
`type day = Date.day =`

1. `| Sun`
2. `| Mon`
3. `| Tue`
4. `| Wed`
5. `| Thu`
6. `| Fri`
7. `| Sat`
   (*

   Days of the week.

   *)

`type month = Date.month =`

1. `| Jan`
2. `| Feb`
3. `| Mar`
4. `| Apr`
5. `| May`
6. `| Jun`
7. `| Jul`
8. `| Aug`
9. `| Sep`
10. `| Oct`
11. `| Nov`
12. `| Dec`
    (*

    Months of the year.

    *)

`type year = Date.year`

Year as an int

`type second = Time.second`
`type field = [`

1. `| Date.field`
2. `| 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

Those functions have the same behaviour as those defined in `Time_sig.S`.

`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

Those functions have the same behavious as those defined in `Date_sig.S`.

`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

`to_jd` and `to_mjd` are more precise than `Date_sig.S.to_jd` and `Date_sig.S.to_mjd`.

`val to_jd : t -> float`
`val to_mjd : t -> float`

Those functions have the same behavious as those defined in `Time_sig.S`.

`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

Those functions have the same behavious as those defined in `Date_sig.S`.

`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

Those functions have the same behavious as those defined in `Time_sig.S`.

`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

Those functions have the same behavious as those defined in `Date_sig.S`.

`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