NAME
getdate() — convert user format date and time
SYNOPSIS
#include <time.h>
struct tm *getdate(const char *string);
Obsolescent Interface
int getdate_r(const char *string, struct tm *result, int *errnum);
DESCRIPTION
The
getdate()
function converts user definable date and/or time specifications
pointed to by
string
into a
struct tm.
The structure declaration is in the
<time.h>
header file (see
ctime(3C)).
User-supplied templates are used
to parse and interpret the input string.
The templates are text files created by the user
and identified via the environment variable
DATEMSK.
DATEMSK
should be set to indicate the full path name of the template file.
The first line in the template that matches the input specification
is used for interpretation and conversion into the internal time format.
Upon successful completion,
getdate()
returns a pointer to a
struct tm;
otherwise, it returns NULL
and the symbol
getdate_err
is set to indicate the error.
The following field descriptors are supported:
- %%
same as
%
- %a
abbreviated weekday name
- %A
full weekday name
- %b
abbreviated month name
- %B
full month name
- %c
locale's appropriate date and time representation
- %d
day of the month (01 through 31; the leading 0 is optional)
- %e
same as
%d
- %D
date as
%m/%d/%y
- %h
abbreviated month name
- %H
hour (00 through 23)
- %I
hour (01 through 12)
- %m
month number (01 through 12)
- %M
minute (00 through 59)
- %n
same as
\n
- %p
locale's equivalent of either
AM or PM
- %r
time as
%I:%M:%S %p
- %R
time as
%H:%M
- %S
seconds (00 through 61)
- %t
insert a tab
- %T
time as
%H:%M:%S
- %w
weekday number (Sunday = 0 through Saturday = 6)
- %x
locale's appropriate date representation
- %X
locale's appropriate time representation
- %y
year without century (00 through 99). For inputs
69-99, the 20th century (1900s) is assumed, and
for inputs 00-68, the 21st century (2000s) is
assumed.
- %Y
year as
ccyy
(e.g., 1986)
- %Z
time zone name or no characters if no time zone exists.
If the time zone supplied by
%Z
is not the same as the time zone
getdate()
expects, an invalid specification error is returned.
getdate()
calculates the expected time zone from the
TZ
environment variable.
Month and weekday names may consist of any combination
of uppercase and lowercase letters.
The user can request that the input date or time specification
be in a specific language by setting the
LC_TIME
category (see
setlocale(3C)).
For descriptors that allow leading zeros,
leading zeros are optional.
However, the number of digits used for those descriptors
must not exceed two, including leading zeros.
Extra whitespace in either the template file or in
string
is ignored.
The field descriptors
%c,
%x,
and
%X
are not supported if they include unsupported field descriptors.
The following example shows the possible contents of a template:
%m
%A %B %d, %Y, %H:%M:%S
%A
%B
%m/%d/%y %I %p
%d,%m,%Y %H:%M
at %A the %dst of %B in %Y
run job at %I %p, %B %dnd
%A den %d. %B %Y %H.%M Uhr
The following are examples of valid input specifications for the above
template:
getdate("10/1/87 4 PM");
getdate("Friday");
getdate("Friday September 18, 1987, 10:30:30");
getdate("24,9,1986 10:30");
getdate("at monday the 1st of december in 1986");
getdate("run job at 3 PM, december 2nd");
If the
LC_TIME
category is set to a German locale that includes
freitag
as a weekday name and
oktober
as a month name, the following would be valid:
getdate("freitag den 10. oktober 1986 10.30 Uhr");
This example shows how local date and time specification
can be defined in the template:
The following rules apply
when converting the input specification
into the internal format:
If only the weekday is given,
today is assumed
if the given day is equal to the current day,
and next week if it is less.
If only the month is given,
the current month is assumed
if the given month is equal to the current month,
and next year if it is less and no year is given
(the first day of the month is assumed if no day is given).
If no hour, minute and second are given,
the current hour, minute and second are assumed.
If no date is given, today is assumed
if the given hour is greater than the current hour
and tomorrow is assumed if it is less.
The following examples help to illustrate the above rules
assuming that the current date is
Mon Sep 22 12:19:47 EDT 1986,
and the
LC_TIME
category is set to the default
C
locale.
Obsolescent Interface
getdate_r()
converts user format date and time.
ERRORS
Upon failure,
getdate()
returns NULL and the symbol
getdate_err
is set to indicate the error.
The following is a complete list of the
getdate_err
settings and their interpretation:
- 1
the
DATEMSK
environment variable is null or undefined,
- 2
the template file cannot be opened for reading,
- 3
failed to get file status information,
- 4
the template file is not a regular file,
- 5
an error is encountered while reading the template file,
- 6
memory allocation failed (not enough memory available),
- 7
there is no line in the template that matches the input,
- 8
invalid input specification. For example,
February 31; or the time specified cannot
be represented in the
time_t
data type in 32-bit HP-UX (which represents Tuesday January 19
03:14:07 UTC, 2038) or exceeds the maximum date supported in
64-bit HP-UX (which is Friday December 31 23:59:59 UTC, 9999).
APPLICATION USAGE
getdate()
is thread-safe. It is not async-cancel-safe.
WARNINGS
The return value for
getdate()
points to data whose content is overwritten by each call by the same thread.
getdate_r()
is
an obsolescent interface supported only for compatibility with
existing DCE applications. New multi-threaded applications should use
getdate().