Provided by: inn_1.7.2q-46_amd64 bug


       parsedate - convert time and date string to number


       #include <sys/types.h>

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

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


       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 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]] [meridian] [zone] or hhmm
              [meridian] [zone].  If no meridian is specified, hh is  interpreted  on  a  24-hour

       date   A  specific  month  and  day  with  optional  year.   The  acceptable  formats  are
              mm/dd[/yy], yyyy/mm/dd,  monthname  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 differences.

       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.


       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.


       Originally written by Steven M. Bellovin <> while at the University of
       North Carolina at Chapel Hill and distributed under the name getdate.

       A major overhaul was done by Rich $alz <> and Jim Berets <> in
       August, 1990.

       It was further revised (primarily to remove obsolete constructs and timezone names) a year
       later by Rich (now <>) for InterNetNews, and the name was changed.   This  is
       revision 1.10, dated 1993/01/29.


       date(1), ctime(3), libinn(3), time(2).