xref: /minix3/lib/libutil/parsedate.3 (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc.\"     $NetBSD: parsedate.3,v 1.15 2014/10/08 22:10:04 wiz Exp $
20c3983b2SBen Gras.\"
30c3983b2SBen Gras.\" Copyright (c) 2006 The NetBSD Foundation, Inc.
40c3983b2SBen Gras.\" All rights reserved.
50c3983b2SBen Gras.\"
60c3983b2SBen Gras.\" This code is derived from software contributed to The NetBSD Foundation
70c3983b2SBen Gras.\" by Christos Zoulas.
80c3983b2SBen Gras.\"
90c3983b2SBen Gras.\" Redistribution and use in source and binary forms, with or without
100c3983b2SBen Gras.\" modification, are permitted provided that the following conditions
110c3983b2SBen Gras.\" are met:
120c3983b2SBen Gras.\" 1. Redistributions of source code must retain the above copyright
130c3983b2SBen Gras.\"    notice, this list of conditions and the following disclaimer.
140c3983b2SBen Gras.\" 2. Redistributions in binary form must reproduce the above copyright
150c3983b2SBen Gras.\"    notice, this list of conditions and the following disclaimer in the
160c3983b2SBen Gras.\"    documentation and/or other materials provided with the distribution.
170c3983b2SBen Gras.\"
180c3983b2SBen Gras.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
190c3983b2SBen Gras.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
200c3983b2SBen Gras.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
210c3983b2SBen Gras.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
220c3983b2SBen Gras.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
230c3983b2SBen Gras.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
240c3983b2SBen Gras.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
250c3983b2SBen Gras.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
260c3983b2SBen Gras.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
270c3983b2SBen Gras.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
280c3983b2SBen Gras.\" POSSIBILITY OF SUCH DAMAGE.
290c3983b2SBen Gras.\"
30*0a6a1f1dSLionel Sambuc.Dd October 8, 2014
310c3983b2SBen Gras.Dt PARSEDATE 3
320c3983b2SBen Gras.Os
330c3983b2SBen Gras.Sh NAME
340c3983b2SBen Gras.Nm parsedate
350c3983b2SBen Gras.Nd date parsing function
360c3983b2SBen Gras.Sh LIBRARY
370c3983b2SBen Gras.Lb libutil
380c3983b2SBen Gras.Sh SYNOPSIS
390c3983b2SBen Gras.In util.h
400c3983b2SBen Gras.Ft time_t
410c3983b2SBen Gras.Fn parsedate "const char *datestr" "const time_t *time" "const int *tzoff"
420c3983b2SBen Gras.Sh DESCRIPTION
430c3983b2SBen GrasThe
440c3983b2SBen Gras.Fn parsedate
450c3983b2SBen Grasfunction parses a datetime from
460c3983b2SBen Gras.Ar datestr
47dba3562dSLionel Sambucdescribed in English relative to an optional
480c3983b2SBen Gras.Ar time
49*0a6a1f1dSLionel Sambucpoint,
50*0a6a1f1dSLionel Sambucand an optional timezone offset (in minutes behind/west of UTC)
51*0a6a1f1dSLionel Sambucspecified in
520c3983b2SBen Gras.Ar tzoff .
53*0a6a1f1dSLionel SambucIf
540c3983b2SBen Gras.Ar time
55*0a6a1f1dSLionel Sambucis
56*0a6a1f1dSLionel Sambuc.Dv NULL
57*0a6a1f1dSLionel Sambucthen the current time is used.
58*0a6a1f1dSLionel SambucIf
590c3983b2SBen Gras.Ar tzoff
60*0a6a1f1dSLionel Sambucis
610c3983b2SBen Gras.Dv NULL ,
62*0a6a1f1dSLionel Sambucthen the current time zone is used.
630c3983b2SBen Gras.Pp
640c3983b2SBen GrasThe
650c3983b2SBen Gras.Ar datestr
660c3983b2SBen Grasis a sequence of white-space separated items.
670c3983b2SBen GrasThe white-space is optional the concatenated items are not ambiguous.
680c3983b2SBen GrasAn empty
690c3983b2SBen Gras.Ar datestr
700c3983b2SBen Grasis equivalent to midnight today (the beginning of this day).
710c3983b2SBen Gras.Pp
720c3983b2SBen GrasThe following words have the indicated numeric meanings:
730c3983b2SBen Gras.Dv last =
740c3983b2SBen Gras\-1,
750c3983b2SBen Gras.Dv this =
760c3983b2SBen Gras0,
770c3983b2SBen Gras.Dv first, next, or one =
780c3983b2SBen Gras1,
790c3983b2SBen Gras.Dv second
800c3983b2SBen Grasis unused so that it is not confused with
810c3983b2SBen Gras.Dq seconds ,
820c3983b2SBen Gras.Dv two =
830c3983b2SBen Gras2,
840c3983b2SBen Gras.Dv third or three =
850c3983b2SBen Gras3,
860c3983b2SBen Gras.Dv fourth or four =
870c3983b2SBen Gras4,
880c3983b2SBen Gras.Dv fifth or five  =
890c3983b2SBen Gras5,
900c3983b2SBen Gras.Dv sixth or six  =
910c3983b2SBen Gras6,
920c3983b2SBen Gras.Dv seventh or seven =
930c3983b2SBen Gras7,
940c3983b2SBen Gras.Dv eighth or eight =
950c3983b2SBen Gras8,
960c3983b2SBen Gras.Dv ninth or nine =
970c3983b2SBen Gras9,
980c3983b2SBen Gras.Dv tenth or ten =
990c3983b2SBen Gras10,
1000c3983b2SBen Gras.Dv eleventh or eleven =
1010c3983b2SBen Gras11,
102dba3562dSLionel Sambuc.Dv twelfth or twelve =
1030c3983b2SBen Gras12.
1040c3983b2SBen Gras.Pp
1050c3983b2SBen GrasThe following words are recognized in English only:
1060c3983b2SBen Gras.Dv AM ,
1070c3983b2SBen Gras.Dv PM ,
1080c3983b2SBen Gras.Dv a.m. ,
1090c3983b2SBen Gras.Dv p.m.
1100c3983b2SBen Gras.Pp
1110c3983b2SBen GrasThe months:
1120c3983b2SBen Gras.Dv january ,
1130c3983b2SBen Gras.Dv february ,
1140c3983b2SBen Gras.Dv march ,
1150c3983b2SBen Gras.Dv april ,
1160c3983b2SBen Gras.Dv may ,
1170c3983b2SBen Gras.Dv june ,
1180c3983b2SBen Gras.Dv july ,
1190c3983b2SBen Gras.Dv august ,
1200c3983b2SBen Gras.Dv september ,
1210c3983b2SBen Gras.Dv sept ,
1220c3983b2SBen Gras.Dv october ,
1230c3983b2SBen Gras.Dv november ,
1240c3983b2SBen Gras.Dv december ,
1250c3983b2SBen Gras.Pp
1260c3983b2SBen GrasThe days of the week:
1270c3983b2SBen Gras.Dv sunday ,
1280c3983b2SBen Gras.Dv monday ,
1290c3983b2SBen Gras.Dv tuesday ,
1300c3983b2SBen Gras.Dv tues ,
1310c3983b2SBen Gras.Dv wednesday ,
1320c3983b2SBen Gras.Dv wednes ,
1330c3983b2SBen Gras.Dv thursday ,
1340c3983b2SBen Gras.Dv thur ,
1350c3983b2SBen Gras.Dv thurs ,
1360c3983b2SBen Gras.Dv friday ,
1370c3983b2SBen Gras.Dv saturday .
1380c3983b2SBen Gras.Pp
1390c3983b2SBen GrasTime units:
1400c3983b2SBen Gras.Dv year ,
1410c3983b2SBen Gras.Dv month ,
1420c3983b2SBen Gras.Dv fortnight ,
1430c3983b2SBen Gras.Dv week ,
1440c3983b2SBen Gras.Dv day ,
1450c3983b2SBen Gras.Dv hour ,
1460c3983b2SBen Gras.Dv minute ,
1470c3983b2SBen Gras.Dv min ,
1480c3983b2SBen Gras.Dv second ,
1490c3983b2SBen Gras.Dv sec ,
1500c3983b2SBen Gras.Dv tomorrow ,
1510c3983b2SBen Gras.Dv yesterday .
1520c3983b2SBen Gras.Pp
1530c3983b2SBen GrasTimezone names:
1540c3983b2SBen Gras.Dv gmt ,
1550c3983b2SBen Gras.Dv ut ,
1560c3983b2SBen Gras.Dv utc ,
1570c3983b2SBen Gras.Dv wet ,
1580c3983b2SBen Gras.Dv bst ,
1590c3983b2SBen Gras.Dv wat ,
1600c3983b2SBen Gras.Dv at ,
1610c3983b2SBen Gras.Dv ast ,
1620c3983b2SBen Gras.Dv adt ,
1630c3983b2SBen Gras.Dv est ,
1640c3983b2SBen Gras.Dv edt ,
1650c3983b2SBen Gras.Dv cst ,
1660c3983b2SBen Gras.Dv cdt ,
1670c3983b2SBen Gras.Dv mst ,
1680c3983b2SBen Gras.Dv mdt ,
1690c3983b2SBen Gras.Dv pst ,
1700c3983b2SBen Gras.Dv pdt ,
1710c3983b2SBen Gras.Dv yst ,
1720c3983b2SBen Gras.Dv ydt ,
1730c3983b2SBen Gras.Dv hst ,
1740c3983b2SBen Gras.Dv hdt ,
1750c3983b2SBen Gras.Dv cat ,
1760c3983b2SBen Gras.Dv ahst ,
1770c3983b2SBen Gras.Dv nt ,
1780c3983b2SBen Gras.Dv idlw ,
1790c3983b2SBen Gras.Dv cet ,
1800c3983b2SBen Gras.Dv met ,
1810c3983b2SBen Gras.Dv mewt ,
1820c3983b2SBen Gras.Dv mest ,
1830c3983b2SBen Gras.Dv swt ,
1840c3983b2SBen Gras.Dv sst ,
1850c3983b2SBen Gras.Dv fwt ,
1860c3983b2SBen Gras.Dv fst ,
1870c3983b2SBen Gras.Dv eet ,
1880c3983b2SBen Gras.Dv bt ,
1890c3983b2SBen Gras.Dv zp4 ,
1900c3983b2SBen Gras.Dv zp5 ,
1910c3983b2SBen Gras.Dv zp6 ,
1920c3983b2SBen Gras.Dv wast ,
1930c3983b2SBen Gras.Dv wadt ,
1940c3983b2SBen Gras.Dv cct ,
1950c3983b2SBen Gras.Dv jst ,
1960c3983b2SBen Gras.Dv east ,
1970c3983b2SBen Gras.Dv eadt ,
1980c3983b2SBen Gras.Dv gst ,
1990c3983b2SBen Gras.Dv nzt ,
2000c3983b2SBen Gras.Dv nzst ,
2010c3983b2SBen Gras.Dv nzdt ,
2020c3983b2SBen Gras.Dv idle .
2030c3983b2SBen Gras.Pp
2040c3983b2SBen GrasA variety of unambiguous dates are recognized:
2050c3983b2SBen Gras.Bl -tag -compact -width "20 Jun 1994"
206*0a6a1f1dSLionel Sambuc.It 9/10/69
2070c3983b2SBen GrasFor years between 69-99 we assume 1900+ and for years between 0-68
2080c3983b2SBen Graswe assume 2000+.
2090c3983b2SBen Gras.It 2006-11-17
2100c3983b2SBen GrasAn ISO-8601 date.
211*0a6a1f1dSLionel Sambuc.It 69-09-10
212*0a6a1f1dSLionel SambucThe year in an ISO-8601 date is always taken literally,
213*0a6a1f1dSLionel Sambucso this is the year 69, not 2069.
2140c3983b2SBen Gras.It 10/1/2000
2150c3983b2SBen GrasOctober 10, 2000; the common US format.
2160c3983b2SBen Gras.It 20 Jun 1994
2170c3983b2SBen Gras.It 23jun2001
2180c3983b2SBen Gras.It 1-sep-06
2190c3983b2SBen GrasOther common abbreviations.
2200c3983b2SBen Gras.It 1/11
221*0a6a1f1dSLionel SambucThe year can be omitted.
222*0a6a1f1dSLionel SambucThis is the US month/day format.
2230c3983b2SBen Gras.El
2240c3983b2SBen Gras.Pp
2250c3983b2SBen GrasAs well as times:
2260c3983b2SBen Gras.Bl -tag -compact -width 12:11:01.000012
2270c3983b2SBen Gras.It 10:01
2280c3983b2SBen Gras.It 10:12pm
2290c3983b2SBen Gras.It 12:11:01.000012
2300c3983b2SBen Gras.It 12:21-0500
2310c3983b2SBen Gras.El
2320c3983b2SBen Gras.Pp
2330c3983b2SBen GrasRelative items are also supported:
2340c3983b2SBen Gras.Bl -tag -compact -width "this thursday"
2350c3983b2SBen Gras.It -1 month
2360c3983b2SBen Gras.It last friday
2370c3983b2SBen Gras.It one week ago
2380c3983b2SBen Gras.It this thursday
2390c3983b2SBen Gras.It next sunday
2400c3983b2SBen Gras.It +2 years
2410c3983b2SBen Gras.El
2420c3983b2SBen Gras.Pp
2430c3983b2SBen GrasSeconds since epoch (also known as UNIX time) are also supported:
2440c3983b2SBen Gras.Bl -tag -compact -width "@735275209"
2450c3983b2SBen Gras.It @735275209
2460c3983b2SBen GrasTue Apr 20 03:06:49 UTC 1993
2470c3983b2SBen Gras.El
2480c3983b2SBen Gras.Sh RETURN VALUES
2490c3983b2SBen Gras.Fn parsedate
2500c3983b2SBen Grasreturns the number of seconds passed since the Epoch, or
2510c3983b2SBen Gras.Dv \-1
2520c3983b2SBen Grasif the date could not be parsed properly.
25384d9c625SLionel SambucA non-error result of
25484d9c625SLionel Sambuc.Dv \-1
25584d9c625SLionel Sambuccan be distinguished from an error by setting
25684d9c625SLionel Sambuc.Va errno
25784d9c625SLionel Sambucto
25884d9c625SLionel Sambuc.Dv 0
25984d9c625SLionel Sambucbefore calling
26084d9c625SLionel Sambuc.Fn parsedate ,
26184d9c625SLionel Sambucand checking the value of
26284d9c625SLionel Sambuc.Va errno
26384d9c625SLionel Sambucafterwards.
2640c3983b2SBen Gras.Sh SEE ALSO
2650c3983b2SBen Gras.Xr date 1 ,
26684d9c625SLionel Sambuc.Xr errno 2 ,
2670c3983b2SBen Gras.Xr eeprom 8
2680c3983b2SBen Gras.Sh HISTORY
2690c3983b2SBen GrasThe parser used in
2700c3983b2SBen Gras.Fn parsedate
2710c3983b2SBen Graswas originally written by Steven M. Bellovin while at the University
2720c3983b2SBen Grasof North Carolina at Chapel Hill.
2730c3983b2SBen GrasIt was later tweaked by a couple of people on Usenet.
2740c3983b2SBen GrasCompletely overhauled by Rich $alz and Jim Berets in August, 1990.
2750c3983b2SBen Gras.Pp
2760c3983b2SBen GrasThe
2770c3983b2SBen Gras.Fn parsedate
2780c3983b2SBen Grasfunction first appeared in
2790c3983b2SBen Gras.Nx 4.0 .
2800c3983b2SBen Gras.Sh BUGS
2810c3983b2SBen Gras.Bl -tag -compact -width 1
2820c3983b2SBen Gras.It 1
2830c3983b2SBen GrasThe
2840c3983b2SBen Gras.Fn parsedate
2850c3983b2SBen Grasfunction is not re-entrant or thread-safe.
2860c3983b2SBen Gras.It 2
2870c3983b2SBen GrasThe
2880c3983b2SBen Gras.Fn parsedate
2890c3983b2SBen Grasfunction cannot compute days before the unix epoch (19700101).
2900c3983b2SBen Gras.It 3
2910c3983b2SBen GrasThe
2920c3983b2SBen Gras.Fn parsedate
2930c3983b2SBen Grasfunction assumes years less than 0 mean -
2940c3983b2SBen Gras.Fa year ,
2950c3983b2SBen Grasyears less than 70 mean 2000 +
2960c3983b2SBen Gras.Fa year ,
2970c3983b2SBen Grasyears less than 100 mean 1900 +
2980c3983b2SBen Gras.Fa year .
2990c3983b2SBen Gras.El
300