Man Linux: Main Page and Category List


       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

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

       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


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