module Netdate:Support for common date/time parsing and formatting. Many routines refer to the epoch, which for Unix is 00:00:00 UTC, January 1, 1970.sig
..end
type
t = {
|
year : |
(* | complete year | *) |
|
month : |
(* | 1..12 | *) |
|
day : |
(* | 1..31 | *) |
|
hour : |
(* | 0..23 | *) |
|
minute : |
(* | 0..59 | *) |
|
second : |
(* | 0..60 (60=leapsecond) | *) |
|
nanos : |
(* | nanoseconds, new since Ocamlnet-3.5 | *) |
|
zone : |
(* | in minutes; 60 = UTC+0100 | *) |
|
week_day : |
(* | 0 = sunday; -1 if not given | *) |
val localzone : int
val get_localzone : unit -> int
val create : ?localzone:bool -> ?zone:int -> ?nanos:int -> float -> t
The nanos
are added to the float as nanoseconds.
If zone
is set this zone is taken. Otherwise, if
localzone
is set, the current local timezone is used. Otherwise,
UTC is used.
val parse : ?localzone:bool -> ?zone:int -> string -> t
The following particles are recognized (by example):
1971/06/22
06/22/1971
1971-06-22
22-June-1971
22.06.1971
June 22, 1971
22 June 1971
06/22/71
22.06.71
71-06-22
22-June-71
June
, Jun
)Monday
, Mon
)14:55
14:55:28
14:55:28.6754
(the fractional part is not returned)T
UTC
, CET
, or Z
+01:00
, -01:00
, only following time+0100
, -0100
, only following time1900+x
. 2-digit years < 70 are interpreted as 2000+x
.
Support for 2-digit years will be removed in a future version
of Ocamlnet. (Support for 3-digit years is already removed in
Ocamlnet 3.0.)
Only English names of months and weekdays are recognized.
A date must be given. Time, time zones, and weekdays are optional.
A missing time is reported as "00:00:00". A missing weekday is
reported by setting week_day=(-1)
. A missing time zone is
reported by setting zone
to the passed default (which is determined
from the zone
and localzone
arguments as for create
).
It is not checked whether the parsed numbers make sense (e.g. whether months are between 1 and 12).
Date/time strings as defined in RFC 3339 are supported since
Ocamlnet 3.0.
val since_epoch : t -> float
val since_epoch_timespec : t -> float * int
(seconds,nanos)
val since_epoch_approx : t -> float
val parse_epoch : ?localzone:bool -> ?zone:int -> string -> float
val parse_epoch_timespec : ?localzone:bool -> ?zone:int -> string -> float * int
val parse_epoch_approx : ?localzone:bool -> ?zone:int -> string -> float
val format_to : Netchannels.out_obj_channel -> fmt:string -> t -> unit
The format string consists of zero or more conversion specifications and ordinary characters. All ordinary characters are output directly to the channel. A conversion specification consists of the '%' character and one other character.
The conversion specifications are:
%A
: full weekday name.%a
: abbreviated weekday name.%B
: full month name.%b
: abbreviated month name.%C
: (year / 100) as an integer; single digits are preceded by a zero.%c
: equivalent to "%a %b %e %T %Y"
.%D
: equivalent to "%m/%d/%y"
.%d
: day of the month as an integer (01-31); single digits are
preceded by a zero.%e
: day of the month as an integer (1-31).%H
: hour (24-hour clock) as an integer (00-23).%h
: the same as %b.%I
: hour (12-hour clock) as an integer (01-12).%j
: day of the year as an integer (001-366).%k
: hour (24-hour clock) as an integer (0-23);
single digits are preceded by a blank.%l
: hour (12-hour clock) as an integer (1-12);
single digits are preceded by a blank.%M
: minute as an integer (00-59).%m
: month as an integer (01-12).%n
: a newline.%p
: either "AM" or "PM" as appropriate.%P
: either "am" or "pm" as appropriate.%R
: equivalent to "%H:%M"
.%r
: equivalent to "%I:%M:%S %p"
.%S
: second as an integer (00-60). This format accepts a precision
argument, e.g. %.3S
to print the second with three digits after the
dot.%T
: equivalent to "%H:%M:%S"
.%t
: a tab.%U
: week number of the year (Sunday as the first day
of the week) as an integer (00-53).%u
weekday (Monday as the first day of the week) as
an integer (1-7).%w
: weekday (Sunday as the first day of the week) as
an integer (0-6).%X
: representation of the time.%x
: representation of the date.%Y
: year with century as an integer.%y
: year without century as an integer (00-99).%z
: time zone offset from UTC; a leading plus sign
stands for east of UTC, a minus sign for west of UTC, hours and
minutes follow with two digits each and no delimiter between them
(common form for RFC 822 date headers).%:z
: time zone with colon, e.g. +05:00 (new since Ocamlnet 3)%%
: a `%' character.
val format : fmt:string -> t -> string
val mk_date : ?localzone:bool -> ?zone:int -> ?nanos:int -> fmt:string -> float -> string
val mk_mail_date : ?localzone:bool -> ?zone:int -> float -> string
Example: "Sun, 06 Nov 1994 08:49:37 -0500"
.
val mk_usenet_date : ?localzone:bool -> ?zone:int -> float -> string
Example: "Sunday, 06-Nov-94 08:49:37 -0500"
.
Note that this format has only two digits for the year.
val mk_internet_date : ?localzone:bool -> ?zone:int -> ?digits:int -> float -> string
digits
the
number of digits for the fractional part of seconds.
Example: "1996-12-19T16:39:57.89-08:00"
.