November 17, 2006 PARSEDATE 3

### NAME

parsedate - date parsing function

### LIBRARY

System Utilities Library (libutil, -lutil)

### SYNOPSIS

```time_t` parsedate(```const char *datestr``, const time_t *time``, const int *tzoff`)

### DESCRIPTION

The parsedate function parses a datetime from datestr described in english relative to an optional time point and an optional timezone offset in seconds specified in tzoff. If either time or tzoff are ```NULL`, then the current time and timezone offset are used.

The datestr is a sequence of white-space separated items. The white-space is optional the concatenated items are not ambiguous. An empty datestr is equivalent to midnight today (the beginning of this day).

The following words have the indicated numeric meanings: ```last``=` -1, ```this``=` 0, ```first` `or` `next` 1, ```second` is unused so that it is not confused with ``seconds'', ```third``=` 3, ```fourth``=` 4, ```fifth``=` 5, ```sixth``=` 6, ```seventh``=` 7, ```eighth``=` 8, ```ninth``=` 9, ```tenth``=` 10, ```eleventh``=` 11, ```twelfth``=` 12.

The following words are recognized in English only: ```AM`, ```PM`, ```a.m.`, ```p.m.`

The months: ```january`, ```february`, ```march`, ```april`, ```may`, ```june`, ```july`, ```august`, ```september`, ```sept`, ```october`, ```november`, ```december`,

The days of the week: ```sunday`, ```monday`, ```tuesday`, ```tues`, ```wednesday`, ```wednes`, ```thursday`, ```thur`, ```thurs`, ```friday`, ```saturday`.

Time units: ```year`, ```month`, ```fortnight`, ```week`, ```day`, ```hour`, ```minute`, ```min`, ```second`, ```sec`, ```tomorrow`, ```yesterday`.

Timezone names: ```gmt`, ```ut`, ```utc`, ```wet`, ```bst`, ```wat`, ```at`, ```ast`, ```adt`, ```est`, ```edt`, ```cst`, ```cdt`, ```mst`, ```mdt`, ```pst`, ```pdt`, ```yst`, ```ydt`, ```hst`, ```hdt`, ```cat`, ```ahst`, ```nt`, ```idlw`, ```cet`, ```met`, ```mewt`, ```mest`, ```swt`, ```sst`, ```fwt`, ```fst`, ```eet`, ```bt`, ```zp4`, ```zp5`, ```zp6`, ```wast`, ```wadt`, ```cct`, ```jst`, ```east`, ```eadt`, ```gst`, ```nzt`, ```nzst`, ```nzdt`, ```idle`.

A variety of unambiguous dates are recognized:

69-09-10
  For years between 69-99 we assume 1900+ and for years between 0-68 we assume 2000+.
2006-11-17
  An ISO-8601 date.
10/1/2000
  October 10, 2000; the common US format.
20 Jun 1994
23jun2001
1-sep-06
  Other common abbreviations.
1/11
  the year can be omitted

As well as times:

10:01
10:12pm
12:11:01.000012
12:21-0500

Relative items are also supported:

-1 month
last friday
one week ago
this thursday
next sunday
+2 years

### RETURN VALUES

parsedate(``) returns the number of seconds passed since the Epoch, or ```-1` if the date could not be parsed properly.

### SEE ALSO

date(1), eeprom(8)

### HISTORY

The parser used in parsedate(``) was originally written by Steven M. Bellovin while at the University of North Carolina at Chapel Hill. It was later tweaked by a couple of people on Usenet. Completely overhauled by Rich $alz and Jim Berets in August, 1990.

The parsedate(``) function first appeared in NetBSD4.0.