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 char-
     acter 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 libinn(3) is
     used to obtain the current time and timezone.

     The character string consists of zero or more specifications
     of the following form:

     time A time of day, which is of the form hh[:mm[:ss]] [meri-
          dian] [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, month-
          name 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 for-
          mat  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 differ-
     ences.

     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 abbrevi-
     ated  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 con-
     structions.  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
     <smb@research.att.com>  while  at  the  University  of North
     Carolina at Chapel Hill and distributed under the name  get-
     date.

     A major overhaul was done by Rich $alz  <rsalz@bbn.com>  and
     Jim Berets <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
     <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).













Man(1) output converted with man2html