module Calendar:Calendar operations.sig
..end
This module combines the implementations on Date
and Time
.
So, a calendar is a 6-uple (year, month, day, hour, minute, second).
If you only need operations on dates, you should better use the module
Date
. But if you need to manage more precise date, use this module.
The exact Julian period is now
[January, 1st 4713 BC at midday GMT; January 22th, 3268 AC at midday GMT]
.
This module uses floating point arithmetics.
Then, egality over calendars may be erroneous (as egality over float
).
You should better use the equal
function defined in this module instead
of (=)
.
type
t
typeday =
Date.day
=
| |
Sun |
|||
| |
Mon |
|||
| |
Tue |
|||
| |
Wed |
|||
| |
Thu |
|||
| |
Fri |
|||
| |
Sat |
(* | Days of the week. | *) |
typemonth =
Date.month
=
| |
Jan |
|||
| |
Feb |
|||
| |
Mar |
|||
| |
Apr |
|||
| |
May |
|||
| |
Jun |
|||
| |
Jul |
|||
| |
Aug |
|||
| |
Sep |
|||
| |
Oct |
|||
| |
Nov |
|||
| |
Dec |
(* | Months of the year. | *) |
typeyear =
Date.year
typefield =
[ `Day | `Hour | `Minute | `Month | `Second | `Week | `Year ]
val make : int -> int -> int -> int -> int -> int -> t
make year month day hour minute second
makes the calendar
"year-month-day; hour-minute-second".val lmake : year:int ->
?month:int ->
?day:int -> ?hour:int -> ?minute:int -> ?second:int -> unit -> t
make
.
The default value of month
and day
(resp. of hour
, minute
and second
) is 1
(resp. 0
).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
Date.from_jd
: the fractional part represents the
time.val from_mjd : float -> t
Julian day - 2 400 000.5
(more precise than Date.from_mjd
).Time
.val convert : t -> Time_Zone.t -> Time_Zone.t -> t
val to_gmt : t -> t
val from_gmt : t -> t
Date
.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.to_jd
and
Date.to_mjd
.val to_jd : t -> float
val to_mjd : t -> float
Time
.val hour : t -> int
val minute : t -> int
val second : t -> int
val equal : t -> t -> bool
equal
should be used instead of (=)
.Date
.val compare : t -> t -> int
val is_leap_day : t -> bool
val is_gregorian : t -> bool
val is_julian : t -> bool
Time
.val is_pm : t -> bool
val is_am : t -> bool
val to_unixtm : t -> Unix.tm
unix.tm
type.
The field isdst
is always false
. More precise than Date.to_unixtm
.val from_unixtm : Unix.tm -> t
to_unixtm
. Assumes the current time zone.
So, we have the following invariant:
hour (from_unixtm u) = u.Unix.tm_hour
.val to_unixfloat : t -> float
to_unixfloat (make 1970 1 1 0 0 0)
returns 0.0
at UTC.
So such a float is convertible with those of the Unix
module.
More precise than Date.to_unixfloat
.val from_unixfloat : float -> t
to_unixfloat
. Assumes the current time zone.
So, we have the following invariant:
hour (from_unixfloat u) = (Unix.gmtime u).Unix.tm_hour
.val from_date : Date.t -> t
val to_date : t -> Date.t
val to_time : t -> Time.t
module Period:sig
..end
Date
.val add : t -> Period.t -> t
val sub : t -> t -> Period.t
val rem : t -> Period.t -> t
val next : t -> field -> t
val prev : t -> field -> t