PARSEDATE(3)

PARSEDATE(3)

ParseArgv Home Page Subroutines Index pathconf


NAME
       parsedate - convert time and date string to number

SYNOPSIS
       #include <<sys/types.h>>

       typedef struct _TIMEINFO {
           time_t           time;
           long             usec;
           long             tzone;
       } TIMEINFO;

       time_t
       parsedate(text, now)
           char             *text;
           TIMEINFO         *now;

DESCRIPTION
       Parsedate  converts  many  common time specifications into
       the number of seconds since the epoch -- i.e.,  a  time_t;
       see time(2).

       Parsedate  returns  the  time,  or -1 on error.  Text is a
       character string containing the time and date.  Now  is  a
       pointer  to  the  time that should be used for calculating
       relative dates.  If now is NULL, then GetTimeInfo in  lib-
       inn(3) is used to obtain the current time and timezone.

       The  character  string consists of zero or more specifica-
       tions of the following form:

       time   A time of day, which is of  the  form  hh[:mm[:ss]]
              [meridian] [zone] or hhmm [meridian] [zone].  If no
              meridian is  specified,  hh  is  interpreted  on  a
              24-hour clock.

       date   A  specific  month and day with optional year.  The
              acceptable formats are mm/dd[/yy], yyyy/mm/dd, mon-
              thname  dd[,  yy],  dd  monthname [yy], and day, dd
              monthname yy.  The  default  year  is  the  current
              year.   If  the year is less then 100, then 1900 is
              added to it; if it is less then 21,  then  2000  is
              added to it.

       relative time
              A  specification relative to the current time.  The
              format is number unit; acceptable units  are  year,
              month, week, day, hour, minute (or min), and second
              (or sec).  The unit can be specified as a  singular
              or plural, as in 3 weeks.

       The  actual  date is calculated according to the following
       steps.  First, any absolute date and/or time is  processed
       and  converted.   Using that time as the base, day-of-week

       specifications are added.  Next,  relative  specifications
       are  used.  If a date or day is specified, and no absolute
       or relative time is given, midnight is used.   Finally,  a
       correction  is applied so that the correct hour of the day
       is produced after allowing for daylight savings time  dif-
       ferences.

       Parsedate  ignores  case  when  parsing all words; unknown
       words are taken to be unknown timezones, which are treated
       as  GMT.  The names of the months and days of the week can
       be abbreviated to their first three letters, with optional
       trailing  period.   Periods are ignored in any timezone or
       meridian values.

BUGS
       Parsedate does not accept all  desirable  and  unambiguous
       constructions.    Semantically  incorrect  dates  such  as
       ``February 31'' are accepted.

       Daylight savings time is always taken as a one-hour change
       which is wrong for some places.  The daylight savings time
       correction can get confused if parsing a  time  within  an
       hour  of when the reckoning changes, or if given a partial
       date.

HISTORY
       Originally    written    by     Steven     M.     Bellovin
       lt;smb@research.att.com  while  at  the University of North
       Carolina at Chapel Hill and  distributed  under  the  name
       getdate.

       A major overhaul was done by Rich $alz lt;rsalz@bbn.com and
       Jim Berets lt;jberets@bbn.com in August, 1990.

       It was further revised (primarily to remove obsolete  con-
       structs  and  timezone  names)  a  year later by Rich (now
       lt;rsalz@osf.org)  for  InterNetNews,  and  the  name   was
       changed.  This is revision 1.10, dated 1993/01/29.

SEE ALSO
       date(1) ctime(3) libinn(3) time(2). 

ParseArgv Home Page Subroutines Index pathconf