module Make:
Implement a calendar from a date implementation and a time implementation.
This module uses float. Then results may be very unprecise.
Since 2.0
Datatypes
module Date: Date_sig.S
Date implementation used by this calendar.
module Time: Time_sig.S
Time implementation used by this calendar.
type
t
type
day = Date.day
=
| |
Sun |
| |
Mon |
| |
Tue |
| |
Wed |
| |
Thu |
| |
Fri |
| |
Sat |
type
month = Date.month
=
| |
Jan |
| |
Feb |
| |
Mar |
| |
Apr |
| |
May |
| |
Jun |
| |
Jul |
| |
Aug |
| |
Sep |
| |
Oct |
| |
Nov |
| |
Dec |
type
year = Date.year
Year as an int
type
second = Time.second
type
field = [ `Day | `Hour | `Minute | `Month | `Second | `Week | `Year ]
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".
RaisesD.Out_of_bounds
when a date is outside the Julian period.
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
).
Since 1.05
RaisesD.Out_of_bounds
when a date is outside the Julian period.
D.Undefined
when a date belongs to [October 5th, 1582; October
14th, 1582]
.
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
Conversions
Those functions have the same behaviour as those defined in
Time_sig.S
.
val convert : t -> Time_Zone.t -> Time_Zone.t -> t
val to_gmt : t -> t
val from_gmt : t -> t
Getters
Getters
Those functions have the same behavious as those defined in
Date_sig.S
.
val days_in_month : t -> int
val day_of_week : t -> day
val day_of_month : t -> int
val day_of_year : t -> int
val week : t -> int
val month : t -> month
val year : t -> int
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
val minute : t -> int
val second : t -> second
Calendars are comparable
val equal : t -> t -> bool
val compare : t -> t -> int
val hash : t -> int
Those functions have the same behavious as those defined in
Date_sig.S
.
val is_leap_day : t -> bool
val is_gregorian : t -> bool
val is_julian : t -> bool
Those functions have the same behavious as those defined in
Time_sig.S
.
val is_pm : t -> bool
val is_am : t -> bool
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
Arithmetic operations on calendars and periods
Those functions have the same behavious as those defined in
Date_sig.S
.
val add : t ->
[< Period.date_field ] Period.period -> t
val sub : t ->
t ->
[< Period.date_field > `Day `Week ] Period.period
val precise_sub : t -> t -> Period.t
val rem : t ->
[< Period.date_field ] Period.period -> t
val next : t -> field -> t
val prev : t -> field -> t