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