xref: /dflybsd-src/lib/libc/stdtime/getdate.3 (revision 8f9e67109499acc57ad368877f4b3b0b7cdf6d93)
1*8f9e6710SSascha Wildner.\"	$NetBSD: getdate.3,v 1.10 2018/02/11 13:28:49 wiz Exp $
2*8f9e6710SSascha Wildner.\"
3*8f9e6710SSascha Wildner.\" Copyright (c) 2009, 2011, 2012, The NetBSD Foundation.
4*8f9e6710SSascha Wildner.\" All Rights Reserved.
5*8f9e6710SSascha Wildner.\"
6*8f9e6710SSascha Wildner.\" This code is derived from software contributed to The NetBSD Foundation
7*8f9e6710SSascha Wildner.\" by Brian Ginsbach.
8*8f9e6710SSascha Wildner.\"
9*8f9e6710SSascha Wildner.\" Redistribution and use in source and binary forms, with or without
10*8f9e6710SSascha Wildner.\" modification, are permitted provided that the following conditions
11*8f9e6710SSascha Wildner.\" are met:
12*8f9e6710SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
13*8f9e6710SSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
14*8f9e6710SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
15*8f9e6710SSascha Wildner.\"    notice, this list of conditions and the following disclaimer in the
16*8f9e6710SSascha Wildner.\"    documentation and/or other materials provided with the distribution.
17*8f9e6710SSascha Wildner.\"
18*8f9e6710SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19*8f9e6710SSascha Wildner.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20*8f9e6710SSascha Wildner.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21*8f9e6710SSascha Wildner.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22*8f9e6710SSascha Wildner.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*8f9e6710SSascha Wildner.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*8f9e6710SSascha Wildner.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*8f9e6710SSascha Wildner.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*8f9e6710SSascha Wildner.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*8f9e6710SSascha Wildner.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28*8f9e6710SSascha Wildner.\" POSSIBILITY OF SUCH DAMAGE.
29*8f9e6710SSascha Wildner.\"
30*8f9e6710SSascha Wildner.Dd May 24, 2020
31*8f9e6710SSascha Wildner.Dt GETDATE 3
32*8f9e6710SSascha Wildner.Os
33*8f9e6710SSascha Wildner.Sh NAME
34*8f9e6710SSascha Wildner.Nm getdate ,
35*8f9e6710SSascha Wildner.Nm getdate_err
36*8f9e6710SSascha Wildner.Nd convert user format date and time
37*8f9e6710SSascha Wildner.Sh LIBRARY
38*8f9e6710SSascha Wildner.Lb libc
39*8f9e6710SSascha Wildner.Sh SYNOPSIS
40*8f9e6710SSascha Wildner.In time.h
41*8f9e6710SSascha Wildner.Ft "struct tm *"
42*8f9e6710SSascha Wildner.Fo "getdate"
43*8f9e6710SSascha Wildner.Fa "const char *str"
44*8f9e6710SSascha Wildner.Fc
45*8f9e6710SSascha Wildner.Vt extern int getdate_err ;
46*8f9e6710SSascha Wildner.Sh DESCRIPTION
47*8f9e6710SSascha WildnerThe
48*8f9e6710SSascha Wildner.Fn getdate
49*8f9e6710SSascha Wildnerfunction converts a date or time character string pointed to by
50*8f9e6710SSascha Wildner.Fa str
51*8f9e6710SSascha Wildnerinto a static
52*8f9e6710SSascha Wildner.Vt tm
53*8f9e6710SSascha Wildnerstructure described in
54*8f9e6710SSascha Wildner.Xr tm 3 .
55*8f9e6710SSascha Wildner.Pp
56*8f9e6710SSascha WildnerThe input string is parsed and interpreted using templates.
57*8f9e6710SSascha WildnerA text file containing templates is specified by the
58*8f9e6710SSascha Wildnerenvironment variable
59*8f9e6710SSascha Wildner.Ev DATEMSK .
60*8f9e6710SSascha WildnerThis should contain the full path to the template file.
61*8f9e6710SSascha WildnerLines in the template file represent acceptable date and/or time
62*8f9e6710SSascha Wildnerconversion specifications.
63*8f9e6710SSascha WildnerThese specifications are similar to those given for
64*8f9e6710SSascha Wildner.Xr strptime 3 .
65*8f9e6710SSascha WildnerThe first line in the template file that matches the input string
66*8f9e6710SSascha Wildneris used to interpret and convert to internal time format.
67*8f9e6710SSascha Wildner.Ss Internal Format Conversion
68*8f9e6710SSascha WildnerThe following rules apply to converting the input into the internal format.
69*8f9e6710SSascha Wildner.Bl -bullet -offset indent
70*8f9e6710SSascha Wildner.It
71*8f9e6710SSascha WildnerIf only the weekday is given, the conversion assumes today when the
72*8f9e6710SSascha Wildnerweekday matches today or the first future matching weekday.
73*8f9e6710SSascha Wildner.It
74*8f9e6710SSascha WildnerIf only the month and no year is given, the conversion assumes the
75*8f9e6710SSascha Wildnercurrent month when the month matches or the first future matching month.
76*8f9e6710SSascha WildnerThe first day of the month is assumed if no day is given.
77*8f9e6710SSascha Wildner.It
78*8f9e6710SSascha WildnerIf only the year is given, the values of the
79*8f9e6710SSascha Wildner.Fa tm_mon ,
80*8f9e6710SSascha Wildner.Fa tm_mday ,
81*8f9e6710SSascha Wildner.Fa tm_wday ,
82*8f9e6710SSascha Wildner.Fa tm_yday ,
83*8f9e6710SSascha Wildnerand
84*8f9e6710SSascha Wildner.Fa tm_isdst
85*8f9e6710SSascha Wildnermembers of the returned
86*8f9e6710SSascha Wildner.Vt "struct tm"
87*8f9e6710SSascha Wildnerare unspecified.
88*8f9e6710SSascha Wildner.It
89*8f9e6710SSascha WildnerIf the century is given, but the year within the century is not given,
90*8f9e6710SSascha Wildnerthe conversion assumes the current year.
91*8f9e6710SSascha Wildner.It
92*8f9e6710SSascha WildnerIf no hour, minute, and second are given, the conversion assumes
93*8f9e6710SSascha Wildnerthe current hour, minute, and second.
94*8f9e6710SSascha Wildner.It
95*8f9e6710SSascha WildnerIf no date is given, the conversion assumes today when the given hour
96*8f9e6710SSascha Wildneris greater than the current hour and tomorrow when the given hour is less.
97*8f9e6710SSascha Wildner.It
98*8f9e6710SSascha WildnerIf
99*8f9e6710SSascha Wildner.Cm \&%Z
100*8f9e6710SSascha Wildneris being scanned, then the broken-down time is based on the
101*8f9e6710SSascha Wildnercurrent time of the matched timezone and not the current runtime
102*8f9e6710SSascha Wildnerenvironment timezone.
103*8f9e6710SSascha Wildner.El
104*8f9e6710SSascha Wildner.Sh RETURN VALUES
105*8f9e6710SSascha WildnerIf successful, the
106*8f9e6710SSascha Wildner.Fn getdate
107*8f9e6710SSascha Wildnerfunction returns a pointer to a static
108*8f9e6710SSascha Wildner.Vt tm
109*8f9e6710SSascha Wildnerstructure containing the broken-down time.
110*8f9e6710SSascha WildnerOtherwise, a null pointer is returned and
111*8f9e6710SSascha Wildner.Va getdate_err
112*8f9e6710SSascha Wildneris set to indicate the error.
113*8f9e6710SSascha Wildner.Pp
114*8f9e6710SSascha WildnerThe variable
115*8f9e6710SSascha Wildner.Va getdate_err
116*8f9e6710SSascha Wildnercan have the following values:
117*8f9e6710SSascha Wildner.Bl -tag -width NNN
118*8f9e6710SSascha Wildner.It 1
119*8f9e6710SSascha Wildner.Ev DATEMSK
120*8f9e6710SSascha Wildnerenvironment variable is null or undefined.
121*8f9e6710SSascha Wildner.It 2
122*8f9e6710SSascha WildnerCannot open the template file for reading.
123*8f9e6710SSascha Wildner.It 3
124*8f9e6710SSascha WildnerGet file status failed for template file.
125*8f9e6710SSascha Wildner.It 4
126*8f9e6710SSascha WildnerTemplate file is not a regular file.
127*8f9e6710SSascha Wildner.It 5
128*8f9e6710SSascha WildnerEncountered an error while reading the template file.
129*8f9e6710SSascha Wildner.It 6
130*8f9e6710SSascha WildnerCannot allocate memory.
131*8f9e6710SSascha Wildner.It 7
132*8f9e6710SSascha WildnerInput string does not match any line in the template file.
133*8f9e6710SSascha Wildner.It 8
134*8f9e6710SSascha WildnerInput string is invalid (for example, February 31)
135*8f9e6710SSascha Wildneror could not be represented in a
136*8f9e6710SSascha Wildner.Vt time_t .
137*8f9e6710SSascha Wildner.El
138*8f9e6710SSascha Wildner.Sh ENVIRONMENT
139*8f9e6710SSascha Wildner.Bl -tag -width DATEMSK
140*8f9e6710SSascha Wildner.It Ev DATEMSK
141*8f9e6710SSascha WildnerThe full path to the text file containing the templates
142*8f9e6710SSascha Wildnerfor acceptable date and/or time conversions.
143*8f9e6710SSascha Wildner.El
144*8f9e6710SSascha Wildner.Sh FILES
145*8f9e6710SSascha Wildner.Bl -tag -width DATEMSK
146*8f9e6710SSascha Wildner.It  Pa /usr/share/examples/getdate/datemsk.template
147*8f9e6710SSascha WildnerAn example template file that could be specified via the
148*8f9e6710SSascha Wildner.Ev DATEMSK
149*8f9e6710SSascha Wildnerenvironment variable.
150*8f9e6710SSascha Wildner.El
151*8f9e6710SSascha Wildner.Sh EXAMPLES
152*8f9e6710SSascha WildnerThe following example shows the possible contents of a template file:
153*8f9e6710SSascha Wildner.Pp
154*8f9e6710SSascha Wildner.Bd -literal -offset indent -compact
155*8f9e6710SSascha Wildner%m
156*8f9e6710SSascha Wildner%A %B %d, %Y, %H:%M:%S
157*8f9e6710SSascha Wildner%A
158*8f9e6710SSascha Wildner%B
159*8f9e6710SSascha Wildner%m/%d/%y %I %p
160*8f9e6710SSascha Wildner%d,%m,%Y %H:%M
161*8f9e6710SSascha Wildnerat %A the %dst of %B in %Y
162*8f9e6710SSascha Wildnerrun job at %I %p, %B %dnd
163*8f9e6710SSascha Wildner%A den %d. %B %Y %H.%M Uhr
164*8f9e6710SSascha Wildner.Ed
165*8f9e6710SSascha Wildner.Pp
166*8f9e6710SSascha WildnerThe following are examples of valid input for the above template:
167*8f9e6710SSascha Wildner.Pp
168*8f9e6710SSascha Wildner.Bd -literal -offset indent -compact
169*8f9e6710SSascha Wildner10/1/87 4 PM
170*8f9e6710SSascha WildnerFriday
171*8f9e6710SSascha WildnerFriday September 18, 1987, 10:30:30
172*8f9e6710SSascha Wildner24,9,1986 10:30
173*8f9e6710SSascha Wildnerat monday the 1st of december in 1986
174*8f9e6710SSascha Wildnerrun job at 3 PM, december 2nd
175*8f9e6710SSascha Wildner.Ed
176*8f9e6710SSascha Wildner.Pp
177*8f9e6710SSascha WildnerThe following examples show how local data and time specification can be
178*8f9e6710SSascha Wildnerdefined in the template.
179*8f9e6710SSascha Wildner.Bl -column -offset indent ".Li Friday 12:00:00" ".Sy Line in Template"
180*8f9e6710SSascha Wildner.It Sy "Input String" Ta Sy "Line in Template"
181*8f9e6710SSascha Wildner.It Li 11/27/86 Ta Li \&%m/\&%d/\&%y
182*8f9e6710SSascha Wildner.It Li 27.11.86 Ta Li \&%d.\&%m.\&%y
183*8f9e6710SSascha Wildner.It Li 86-11-27 Ta Li \&%y-\&%m-\&%d
184*8f9e6710SSascha Wildner.It Li "Friday 12:00:00" Ta Li "\&%A \&%H:\&%M:\&%S"
185*8f9e6710SSascha Wildner.El
186*8f9e6710SSascha Wildner.Pp
187*8f9e6710SSascha WildnerThe following examples illustrate the Internal Format Conversion rules
188*8f9e6710SSascha Wildnergiven that the current date is
189*8f9e6710SSascha Wildner.Li "Mon Sep 22 12:19:47 EDT 1986"
190*8f9e6710SSascha Wildnerand the
191*8f9e6710SSascha Wildner.Ev LC_TIME
192*8f9e6710SSascha Wildnerenvironment variable is set to the default C locale.
193*8f9e6710SSascha Wildner.Bl -column -offset indent ".Li Jan Wed 1989" ".Sy Line in Template" ".Sy Date"
194*8f9e6710SSascha Wildner.It Sy Input String Ta Sy Line in Template Ta Sy Date
195*8f9e6710SSascha Wildner.It Li Mon Ta Li \&%a Ta Li "Mon Sep 22 12:19:47 EDT 1986"
196*8f9e6710SSascha Wildner.It Li Sun Ta Li \&%a Ta Li "Sun Sep 28 12:19:47 EDT 1986"
197*8f9e6710SSascha Wildner.It Li Fri Ta Li \&%a Ta Li "Fri Sep 26 12:19:47 EDT 1986"
198*8f9e6710SSascha Wildner.It Li September Ta Li \&%B Ta Li "Mon Sep  1 12:19:47 EDT 1986"
199*8f9e6710SSascha Wildner.It Li January Ta Li \&%B Ta Li "Thu Jan  1 12:19:47 EST 1987"
200*8f9e6710SSascha Wildner.It Li December Ta Li \&%B Ta Li "Mon Dec  1 12:19:47 EST 1986"
201*8f9e6710SSascha Wildner.It Li "Sep Mon" Ta Li "\&%b %a" Ta Li "Mon Sep  1 12:19:47 EDT 1986"
202*8f9e6710SSascha Wildner.It Li "Jan Fri" Ta Li "\&%b %a" Ta Li "Fri Jan  2 12:19:47 EST 1987"
203*8f9e6710SSascha Wildner.It Li "Dec Mon" Ta Li "\&%b %a" Ta Li "Mon Dec  1 12:19:47 EST 1986"
204*8f9e6710SSascha Wildner.It Li "Jan Wed 1989" Ta Li "\&%b \&%a \&%Y" Ta Li "Wed Jan  4 12:19:47 EST 1989"
205*8f9e6710SSascha Wildner.It Li "Fri 9" Ta Li "\&%a \&%H" Ta Li "Fri Sep 26 09:00:00 EDT 1986"
206*8f9e6710SSascha Wildner.It Li "Feb 10:30" Ta Li "\&%b \&%H:\&%S" Ta Li "Sun Feb  1 10:00:30 EST 1987"
207*8f9e6710SSascha Wildner.It Li 10:30 Ta Li "\&%H:\&%M" Ta Li "Tue Sep 23 10:30:00 EDT 1986"
208*8f9e6710SSascha Wildner.It Li 13:30 Ta Li "\&%H:\&%M" Ta Li "Tue Sep 22 13:30:00 EDT 1986"
209*8f9e6710SSascha Wildner.El
210*8f9e6710SSascha Wildner.Sh SEE ALSO
211*8f9e6710SSascha Wildner.Xr ctime 3 ,
212*8f9e6710SSascha Wildner.Xr localtime 3 ,
213*8f9e6710SSascha Wildner.Xr mktime 3 ,
214*8f9e6710SSascha Wildner.Xr strftime 3 ,
215*8f9e6710SSascha Wildner.Xr strptime 3 ,
216*8f9e6710SSascha Wildner.Xr time 3
217*8f9e6710SSascha Wildner.Sh STANDARDS
218*8f9e6710SSascha WildnerThe
219*8f9e6710SSascha Wildner.Fn getdate
220*8f9e6710SSascha Wildnerfunction conforms to
221*8f9e6710SSascha Wildner.St -p1003.1-2001 .
222*8f9e6710SSascha Wildner.Sh HISTORY
223*8f9e6710SSascha WildnerThe
224*8f9e6710SSascha Wildner.Nm
225*8f9e6710SSascha Wildnerfunction appeared in
226*8f9e6710SSascha Wildner.At V.4 .
227*8f9e6710SSascha Wildner.Sh BUGS
228*8f9e6710SSascha WildnerThe
229*8f9e6710SSascha Wildner.Nm
230*8f9e6710SSascha Wildnerinterface is inherently unsafe for multi-threaded programs or libraries,
231*8f9e6710SSascha Wildnersince it returns a pointer to a static variable and uses a global state
232*8f9e6710SSascha Wildnervariable.
233