1.\" 2.\" Copyright (c) 1997 Joerg Wunsch 3.\" 4.\" All rights reserved. 5.\" 6.\" Redistribution and use in source and binary forms, with or without 7.\" modification, are permitted provided that the following conditions 8.\" are met: 9.\" 1. Redistributions of source code must retain the above copyright 10.\" notice, this list of conditions and the following disclaimer. 11.\" 2. Redistributions in binary form must reproduce the above copyright 12.\" notice, this list of conditions and the following disclaimer in the 13.\" documentation and/or other materials provided with the distribution. 14.\" 15.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR 16.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, 19.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25.\" " 26.Dd October 2, 2014 27.Dt STRPTIME 3 28.Os 29.Sh NAME 30.Nm strptime 31.Nd parse date and time string 32.Sh LIBRARY 33.Lb libc 34.Sh SYNOPSIS 35.In time.h 36.Ft char * 37.Fo strptime 38.Fa "const char * restrict buf" 39.Fa "const char * restrict format" 40.Fa "struct tm * restrict timeptr" 41.Fc 42.In time.h 43.In xlocale.h 44.Ft char * 45.Fn strptime_l "const char * restrict buf" "const char * restrict format" "struct tm * restrict timeptr" "locale_t loc" 46.Sh DESCRIPTION 47The 48.Fn strptime 49function parses the string in the buffer 50.Fa buf 51according to the string pointed to by 52.Fa format , 53and fills in the elements of the structure pointed to by 54.Fa timeptr . 55The resulting values will be relative to the local time zone. 56Thus, it can be considered the reverse operation of 57.Xr strftime 3 . 58The 59.Fn strptime_l 60function does the same as 61.Fn strptime , 62but takes an explicit locale rather than using the current locale. 63.Pp 64The 65.Fa format 66string consists of zero or more conversion specifications and 67ordinary characters. 68All ordinary characters are matched exactly with the buffer, where 69white space in the format string will match any amount of white space 70in the buffer. 71All conversion specifications are identical to those described in 72.Xr strftime 3 . 73.Pp 74Two-digit year values, including formats 75.Fa %y 76and 77.Fa \&%D , 78are now interpreted as beginning at 1969 per POSIX requirements. 79Years 69-00 are interpreted in the 20th century (1969-2000), years 8001-68 in the 21st century (2001-2068). 81The 82.Fa \&%U 83and 84.Fa %W 85format specifiers accept any value within the range 00 to 53. 86.Pp 87If the 88.Fa format 89string does not contain enough conversion specifications to completely 90specify the resulting 91.Vt struct tm , 92the unspecified members of 93.Va timeptr 94are left untouched. 95For example, if 96.Fa format 97is 98.Dq Li "%H:%M:%S" , 99only 100.Va tm_hour , 101.Va tm_sec 102and 103.Va tm_min 104will be modified. 105If time relative to today is desired, initialize the 106.Fa timeptr 107structure with today's date before passing it to 108.Fn strptime . 109.Sh RETURN VALUES 110Upon successful completion, 111.Fn strptime 112returns the pointer to the first character in 113.Fa buf 114that has not been required to satisfy the specified conversions in 115.Fa format . 116It returns 117.Dv NULL 118if one of the conversions failed. 119.Fn strptime_l 120returns the same values as 121.Fn strptime . 122.Sh SEE ALSO 123.Xr date 1 , 124.Xr scanf 3 , 125.Xr strftime 3 126.Sh HISTORY 127The 128.Fn strptime 129function appeared in 130.Fx 3.0 . 131.Sh AUTHORS 132The 133.Fn strptime 134function has been contributed by Powerdog Industries. 135.Pp 136This man page was written by 137.An J\(:org Wunsch . 138.Sh BUGS 139Both the 140.Fa %e 141and 142.Fa %l 143format specifiers may incorrectly scan one too many digits 144if the intended values comprise only a single digit 145and that digit is followed immediately by another digit. 146Both specifiers accept zero-padded values, 147even though they are both defined as taking unpadded values. 148.Pp 149The 150.Fa %p 151format specifier has no effect unless it is parsed 152.Em after 153hour-related specifiers. 154Specifying 155.Fa %l 156without 157.Fa %p 158will produce undefined results. 159Note that 12AM 160(ante meridiem) 161is taken as midnight 162and 12PM 163(post meridiem) 164is taken as noon. 165.Pp 166The 167.Fa %Z 168format specifier only accepts time zone abbreviations of the local time zone, 169or the value "GMT". 170This limitation is because of ambiguity due to of the over loading of time 171zone abbreviations. 172One such example is 173.Fa EST 174which is both Eastern Standard Time and Eastern Australia Summer Time. 175.Pp 176The 177.Fn strptime 178function does not correctly handle multibyte characters in the 179.Fa format 180argument. 181