Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
HP-UX Reference > G


HP-UX 11i Version 3: February 2007

Technical documentation

» Feedback
Content starts here

 » Table of Contents

 » Index


getdate() — convert user format date and time


#include <time.h>

struct tm *getdate(const char *string);

Obsolescent Interface

int getdate_r(const char *string, struct tm *result, int *errnum);


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 %


abbreviated weekday name


full weekday name


abbreviated month name


full month name


locale's appropriate date and time representation


century number (00 through 99; leading zeros are permitted but not required)


day of the month (01 through 31; the leading 0 is optional)


same as %d


date as %m/%d/%y


abbreviated month name


hour (00 through 23)


hour (01 through 12)


month number (01 through 12)


minute (00 through 59)


same as \n


locale's equivalent of either AM or PM


time as %I:%M:%S %p


time as %H:%M


seconds (00 through 61)


insert a tab


time as %H:%M:%S


weekday number (Sunday = 0 through Saturday = 6)


locale's appropriate date representation


locale's appropriate time representation


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.


year as ccyy (e.g., 1986)


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:

InvocationLine in Template
getdate("Friday 12:00:00")%A %H:%M:%S

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.

  •  Line in 
    Mon%aMon Sep 22 12:19:47 EDT 1986
    Sun%aSun Sep 28 12:19:47 EDT 1986
    Fri%aFri Sep 26 12:19:47 EDT 1986
    September%BMon Sep 1 12:19:47 EDT 1986
    January%BThu Jan 1 12:19:47 EST 1987
    December%BMon Dec 1 12:19:47 EST 1986
    Sep Mon%b %aMon Sep 1 12:19:47 EDT 1986
    Jan Fri%b %aFri Jan 2 12:19:47 EST 1987
    Dec Mon%b %aMon Dec 1 12:19:47 EST 1986
    Jan Wed 1989%b %a %YWed Jan 4 12:19:47 EST 1989
    Fri 9%a %HFri Sep 26 09:00:00 EDT 1986
    Feb 10:30%b %H:%SSun Feb 1 10:30:00 EST 1987
    10:30%H:%MTue Sep 23 10:30:00 EDT 1986
    13:30%H:%MMon Sep 22 13:30:00 EDT 1986

Obsolescent Interface

getdate_r() converts user format date and time. Also see the WARNINGS section.


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:


the DATEMSK environment variable is null or undefined,


the template file cannot be opened for reading,


failed to get file status information,


the template file is not a regular file,


an error is encountered while reading the template file,


memory allocation failed (not enough memory available),


there is no line in the template that matches the input,


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).


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().

Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© 1983-2007 Hewlett-Packard Development Company, L.P.