module Precise: Calendar_sig.S
with module Date = Date and module Time = Time
More precise implementation of calendar in which seconds are integer.
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
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
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
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