getdate.texi 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. @c GNU date syntax documentation
  2. @c Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
  3. @c 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
  4. @c Permission is granted to copy, distribute and/or modify this document
  5. @c under the terms of the GNU Free Documentation License, Version 1.1 or
  6. @c any later version published by the Free Software Foundation; with no
  7. @c Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
  8. @c Texts. A copy of the license is included in the ``GNU Free
  9. @c Documentation License'' file as part of this distribution.
  10. @node Date input formats
  11. @chapter Date input formats
  12. @cindex date input formats
  13. @findex get_date
  14. First, a quote:
  15. @quotation
  16. Our units of temporal measurement, from seconds on up to months, are so
  17. complicated, asymmetrical and disjunctive so as to make coherent mental
  18. reckoning in time all but impossible. Indeed, had some tyrannical god
  19. contrived to enslave our minds to time, to make it all but impossible
  20. for us to escape subjection to sodden routines and unpleasant surprises,
  21. he could hardly have done better than handing down our present system.
  22. It is like a set of trapezoidal building blocks, with no vertical or
  23. horizontal surfaces, like a language in which the simplest thought
  24. demands ornate constructions, useless particles and lengthy
  25. circumlocutions. Unlike the more successful patterns of language and
  26. science, which enable us to face experience boldly or at least
  27. level-headedly, our system of temporal calculation silently and
  28. persistently encourages our terror of time.
  29. @dots{} It is as though architects had to measure length in feet, width
  30. in meters and height in ells; as though basic instruction manuals
  31. demanded a knowledge of five different languages. It is no wonder then
  32. that we often look into our own immediate past or future, last Tuesday
  33. or a week from Sunday, with feelings of helpless confusion. @dots{}
  34. --- Robert Grudin, @cite{Time and the Art of Living}.
  35. @end quotation
  36. This section describes the textual date representations that @sc{gnu}
  37. programs accept. These are the strings you, as a user, can supply as
  38. arguments to the various programs. The C interface (via the
  39. @code{get_date} function) is not described here.
  40. @menu
  41. * General date syntax:: Common rules.
  42. * Calendar date items:: 19 Dec 1994.
  43. * Time of day items:: 9:20pm.
  44. * Time zone items:: @sc{est}, @sc{pdt}, @sc{gmt}.
  45. * Day of week items:: Monday and others.
  46. * Relative items in date strings:: next tuesday, 2 years ago.
  47. * Pure numbers in date strings:: 19931219, 1440.
  48. * Seconds since the Epoch:: @@1078100502.
  49. * Specifying time zone rules:: TZ="America/New_York", TZ="UTC0".
  50. * Authors of get_date:: Bellovin, Eggert, Salz, Berets, et al.
  51. @end menu
  52. @node General date syntax
  53. @section General date syntax
  54. @cindex general date syntax
  55. @cindex items in date strings
  56. A @dfn{date} is a string, possibly empty, containing many items
  57. separated by whitespace. The whitespace may be omitted when no
  58. ambiguity arises. The empty string means the beginning of today (i.e.,
  59. midnight). Order of the items is immaterial. A date string may contain
  60. many flavors of items:
  61. @itemize @bullet
  62. @item calendar date items
  63. @item time of day items
  64. @item time zone items
  65. @item day of the week items
  66. @item relative items
  67. @item pure numbers.
  68. @end itemize
  69. @noindent We describe each of these item types in turn, below.
  70. @cindex numbers, written-out
  71. @cindex ordinal numbers
  72. @findex first @r{in date strings}
  73. @findex next @r{in date strings}
  74. @findex last @r{in date strings}
  75. A few ordinal numbers may be written out in words in some contexts. This is
  76. most useful for specifying day of the week items or relative items (see
  77. below). Among the most commonly used ordinal numbers, the word
  78. @samp{last} stands for @math{-1}, @samp{this} stands for 0, and
  79. @samp{first} and @samp{next} both stand for 1. Because the word
  80. @samp{second} stands for the unit of time there is no way to write the
  81. ordinal number 2, but for convenience @samp{third} stands for 3,
  82. @samp{fourth} for 4, @samp{fifth} for 5,
  83. @samp{sixth} for 6, @samp{seventh} for 7, @samp{eighth} for 8,
  84. @samp{ninth} for 9, @samp{tenth} for 10, @samp{eleventh} for 11 and
  85. @samp{twelfth} for 12.
  86. @cindex months, written-out
  87. When a month is written this way, it is still considered to be written
  88. numerically, instead of being ``spelled in full''; this changes the
  89. allowed strings.
  90. @cindex language, in dates
  91. In the current implementation, only English is supported for words and
  92. abbreviations like @samp{AM}, @samp{DST}, @samp{EST}, @samp{first},
  93. @samp{January}, @samp{Sunday}, @samp{tomorrow}, and @samp{year}.
  94. @cindex language, in dates
  95. @cindex time zone item
  96. The output of the @command{date} command
  97. is not always acceptable as a date string,
  98. not only because of the language problem, but also because there is no
  99. standard meaning for time zone items like @samp{IST}. When using
  100. @command{date} to generate a date string intended to be parsed later,
  101. specify a date format that is independent of language and that does not
  102. use time zone items other than @samp{UTC} and @samp{Z}. Here are some
  103. ways to do this:
  104. @example
  105. $ LC_ALL=C TZ=UTC0 date
  106. Mon Mar 1 00:21:42 UTC 2004
  107. $ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ'
  108. 2004-03-01 00:21:42Z
  109. $ date --iso-8601=ns | tr T ' ' # --iso-8601 is a GNU extension.
  110. 2004-02-29 16:21:42,692722128-0800
  111. $ date --rfc-2822 # a GNU extension
  112. Sun, 29 Feb 2004 16:21:42 -0800
  113. $ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension.
  114. 2004-02-29 16:21:42 -0800
  115. $ date +'@@%s.%N' # %s and %N are GNU extensions.
  116. @@1078100502.692722128
  117. @end example
  118. @cindex case, ignored in dates
  119. @cindex comments, in dates
  120. Alphabetic case is completely ignored in dates. Comments may be introduced
  121. between round parentheses, as long as included parentheses are properly
  122. nested. Hyphens not followed by a digit are currently ignored. Leading
  123. zeros on numbers are ignored.
  124. Invalid dates like @samp{2005-02-29} or times like @samp{24:00} are
  125. rejected. In the typical case of a host that does not support leap
  126. seconds, a time like @samp{23:59:60} is rejected even if it
  127. corresponds to a valid leap second.
  128. @node Calendar date items
  129. @section Calendar date items
  130. @cindex calendar date item
  131. A @dfn{calendar date item} specifies a day of the year. It is
  132. specified differently, depending on whether the month is specified
  133. numerically or literally. All these strings specify the same calendar date:
  134. @example
  135. 1972-09-24 # @sc{iso} 8601.
  136. 72-9-24 # Assume 19xx for 69 through 99,
  137. # 20xx for 00 through 68.
  138. 72-09-24 # Leading zeros are ignored.
  139. 9/24/72 # Common U.S. writing.
  140. 24 September 1972
  141. 24 Sept 72 # September has a special abbreviation.
  142. 24 Sep 72 # Three-letter abbreviations always allowed.
  143. Sep 24, 1972
  144. 24-sep-72
  145. 24sep72
  146. @end example
  147. The year can also be omitted. In this case, the last specified year is
  148. used, or the current year if none. For example:
  149. @example
  150. 9/24
  151. sep 24
  152. @end example
  153. Here are the rules.
  154. @cindex @sc{iso} 8601 date format
  155. @cindex date format, @sc{iso} 8601
  156. For numeric months, the @sc{iso} 8601 format
  157. @samp{@var{year}-@var{month}-@var{day}} is allowed, where @var{year} is
  158. any positive number, @var{month} is a number between 01 and 12, and
  159. @var{day} is a number between 01 and 31. A leading zero must be present
  160. if a number is less than ten. If @var{year} is 68 or smaller, then 2000
  161. is added to it; otherwise, if @var{year} is less than 100,
  162. then 1900 is added to it. The construct
  163. @samp{@var{month}/@var{day}/@var{year}}, popular in the United States,
  164. is accepted. Also @samp{@var{month}/@var{day}}, omitting the year.
  165. @cindex month names in date strings
  166. @cindex abbreviations for months
  167. Literal months may be spelled out in full: @samp{January},
  168. @samp{February}, @samp{March}, @samp{April}, @samp{May}, @samp{June},
  169. @samp{July}, @samp{August}, @samp{September}, @samp{October},
  170. @samp{November} or @samp{December}. Literal months may be abbreviated
  171. to their first three letters, possibly followed by an abbreviating dot.
  172. It is also permitted to write @samp{Sept} instead of @samp{September}.
  173. When months are written literally, the calendar date may be given as any
  174. of the following:
  175. @example
  176. @var{day} @var{month} @var{year}
  177. @var{day} @var{month}
  178. @var{month} @var{day} @var{year}
  179. @var{day}-@var{month}-@var{year}
  180. @end example
  181. Or, omitting the year:
  182. @example
  183. @var{month} @var{day}
  184. @end example
  185. @node Time of day items
  186. @section Time of day items
  187. @cindex time of day item
  188. A @dfn{time of day item} in date strings specifies the time on a given
  189. day. Here are some examples, all of which represent the same time:
  190. @example
  191. 20:02:00.000000
  192. 20:02
  193. 8:02pm
  194. 20:02-0500 # In @sc{est} (U.S. Eastern Standard Time).
  195. @end example
  196. More generally, the time of day may be given as
  197. @samp{@var{hour}:@var{minute}:@var{second}}, where @var{hour} is
  198. a number between 0 and 23, @var{minute} is a number between 0 and
  199. 59, and @var{second} is a number between 0 and 59 possibly followed by
  200. @samp{.} or @samp{,} and a fraction containing one or more digits.
  201. Alternatively,
  202. @samp{:@var{second}} can be omitted, in which case it is taken to
  203. be zero. On the rare hosts that support leap seconds, @var{second}
  204. may be 60.
  205. @findex am @r{in date strings}
  206. @findex pm @r{in date strings}
  207. @findex midnight @r{in date strings}
  208. @findex noon @r{in date strings}
  209. If the time is followed by @samp{am} or @samp{pm} (or @samp{a.m.}
  210. or @samp{p.m.}), @var{hour} is restricted to run from 1 to 12, and
  211. @samp{:@var{minute}} may be omitted (taken to be zero). @samp{am}
  212. indicates the first half of the day, @samp{pm} indicates the second
  213. half of the day. In this notation, 12 is the predecessor of 1:
  214. midnight is @samp{12am} while noon is @samp{12pm}.
  215. (This is the zero-oriented interpretation of @samp{12am} and @samp{12pm},
  216. as opposed to the old tradition derived from Latin
  217. which uses @samp{12m} for noon and @samp{12pm} for midnight.)
  218. @cindex time zone correction
  219. @cindex minutes, time zone correction by
  220. The time may alternatively be followed by a time zone correction,
  221. expressed as @samp{@var{s}@var{hh}@var{mm}}, where @var{s} is @samp{+}
  222. or @samp{-}, @var{hh} is a number of zone hours and @var{mm} is a number
  223. of zone minutes. You can also separate @var{hh} from @var{mm} with a colon.
  224. When a time zone correction is given this way, it
  225. forces interpretation of the time relative to
  226. Coordinated Universal Time (@sc{utc}), overriding any previous
  227. specification for the time zone or the local time zone. For example,
  228. @samp{+0530} and @samp{+05:30} both stand for the time zone 5.5 hours
  229. ahead of @sc{utc} (e.g., India). The @var{minute}
  230. part of the time of day may not be elided when a time zone correction
  231. is used. This is the best way to specify a time zone correction by
  232. fractional parts of an hour.
  233. Either @samp{am}/@samp{pm} or a time zone correction may be specified,
  234. but not both.
  235. @node Time zone items
  236. @section Time zone items
  237. @cindex time zone item
  238. A @dfn{time zone item} specifies an international time zone, indicated
  239. by a small set of letters, e.g., @samp{UTC} or @samp{Z}
  240. for Coordinated Universal
  241. Time. Any included periods are ignored. By following a
  242. non-daylight-saving time zone by the string @samp{DST} in a separate
  243. word (that is, separated by some white space), the corresponding
  244. daylight saving time zone may be specified.
  245. Alternatively, a non-daylight-saving time zone can be followed by a
  246. time zone correction, to add the two values. This is normally done
  247. only for @samp{UTC}; for example, @samp{UTC+05:30} is equivalent to
  248. @samp{+05:30}.
  249. Time zone items other than @samp{UTC} and @samp{Z}
  250. are obsolescent and are not recommended, because they
  251. are ambiguous; for example, @samp{EST} has a different meaning in
  252. Australia than in the United States. Instead, it's better to use
  253. unambiguous numeric time zone corrections like @samp{-0500}, as
  254. described in the previous section.
  255. If neither a time zone item nor a time zone correction is supplied,
  256. time stamps are interpreted using the rules of the default time zone
  257. (@pxref{Specifying time zone rules}).
  258. @node Day of week items
  259. @section Day of week items
  260. @cindex day of week item
  261. The explicit mention of a day of the week will forward the date
  262. (only if necessary) to reach that day of the week in the future.
  263. Days of the week may be spelled out in full: @samp{Sunday},
  264. @samp{Monday}, @samp{Tuesday}, @samp{Wednesday}, @samp{Thursday},
  265. @samp{Friday} or @samp{Saturday}. Days may be abbreviated to their
  266. first three letters, optionally followed by a period. The special
  267. abbreviations @samp{Tues} for @samp{Tuesday}, @samp{Wednes} for
  268. @samp{Wednesday} and @samp{Thur} or @samp{Thurs} for @samp{Thursday} are
  269. also allowed.
  270. @findex next @var{day}
  271. @findex last @var{day}
  272. A number may precede a day of the week item to move forward
  273. supplementary weeks. It is best used in expression like @samp{third
  274. monday}. In this context, @samp{last @var{day}} or @samp{next
  275. @var{day}} is also acceptable; they move one week before or after
  276. the day that @var{day} by itself would represent.
  277. A comma following a day of the week item is ignored.
  278. @node Relative items in date strings
  279. @section Relative items in date strings
  280. @cindex relative items in date strings
  281. @cindex displacement of dates
  282. @dfn{Relative items} adjust a date (or the current date if none) forward
  283. or backward. The effects of relative items accumulate. Here are some
  284. examples:
  285. @example
  286. 1 year
  287. 1 year ago
  288. 3 years
  289. 2 days
  290. @end example
  291. @findex year @r{in date strings}
  292. @findex month @r{in date strings}
  293. @findex fortnight @r{in date strings}
  294. @findex week @r{in date strings}
  295. @findex day @r{in date strings}
  296. @findex hour @r{in date strings}
  297. @findex minute @r{in date strings}
  298. The unit of time displacement may be selected by the string @samp{year}
  299. or @samp{month} for moving by whole years or months. These are fuzzy
  300. units, as years and months are not all of equal duration. More precise
  301. units are @samp{fortnight} which is worth 14 days, @samp{week} worth 7
  302. days, @samp{day} worth 24 hours, @samp{hour} worth 60 minutes,
  303. @samp{minute} or @samp{min} worth 60 seconds, and @samp{second} or
  304. @samp{sec} worth one second. An @samp{s} suffix on these units is
  305. accepted and ignored.
  306. @findex ago @r{in date strings}
  307. The unit of time may be preceded by a multiplier, given as an optionally
  308. signed number. Unsigned numbers are taken as positively signed. No
  309. number at all implies 1 for a multiplier. Following a relative item by
  310. the string @samp{ago} is equivalent to preceding the unit by a
  311. multiplier with value @math{-1}.
  312. @findex day @r{in date strings}
  313. @findex tomorrow @r{in date strings}
  314. @findex yesterday @r{in date strings}
  315. The string @samp{tomorrow} is worth one day in the future (equivalent
  316. to @samp{day}), the string @samp{yesterday} is worth
  317. one day in the past (equivalent to @samp{day ago}).
  318. @findex now @r{in date strings}
  319. @findex today @r{in date strings}
  320. @findex this @r{in date strings}
  321. The strings @samp{now} or @samp{today} are relative items corresponding
  322. to zero-valued time displacement, these strings come from the fact
  323. a zero-valued time displacement represents the current time when not
  324. otherwise changed by previous items. They may be used to stress other
  325. items, like in @samp{12:00 today}. The string @samp{this} also has
  326. the meaning of a zero-valued time displacement, but is preferred in
  327. date strings like @samp{this thursday}.
  328. When a relative item causes the resulting date to cross a boundary
  329. where the clocks were adjusted, typically for daylight saving time,
  330. the resulting date and time are adjusted accordingly.
  331. The fuzz in units can cause problems with relative items. For
  332. example, @samp{2003-07-31 -1 month} might evaluate to 2003-07-01,
  333. because 2003-06-31 is an invalid date. To determine the previous
  334. month more reliably, you can ask for the month before the 15th of the
  335. current month. For example:
  336. @example
  337. $ date -R
  338. Thu, 31 Jul 2003 13:02:39 -0700
  339. $ date --date='-1 month' +'Last month was %B?'
  340. Last month was July?
  341. $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
  342. Last month was June!
  343. @end example
  344. Also, take care when manipulating dates around clock changes such as
  345. daylight saving leaps. In a few cases these have added or subtracted
  346. as much as 24 hours from the clock, so it is often wise to adopt
  347. universal time by setting the @env{TZ} environment variable to
  348. @samp{UTC0} before embarking on calendrical calculations.
  349. @node Pure numbers in date strings
  350. @section Pure numbers in date strings
  351. @cindex pure numbers in date strings
  352. The precise interpretation of a pure decimal number depends
  353. on the context in the date string.
  354. If the decimal number is of the form @var{yyyy}@var{mm}@var{dd} and no
  355. other calendar date item (@pxref{Calendar date items}) appears before it
  356. in the date string, then @var{yyyy} is read as the year, @var{mm} as the
  357. month number and @var{dd} as the day of the month, for the specified
  358. calendar date.
  359. If the decimal number is of the form @var{hh}@var{mm} and no other time
  360. of day item appears before it in the date string, then @var{hh} is read
  361. as the hour of the day and @var{mm} as the minute of the hour, for the
  362. specified time of day. @var{mm} can also be omitted.
  363. If both a calendar date and a time of day appear to the left of a number
  364. in the date string, but no relative item, then the number overrides the
  365. year.
  366. @node Seconds since the Epoch
  367. @section Seconds since the Epoch
  368. If you precede a number with @samp{@@}, it represents an internal time
  369. stamp as a count of seconds. The number can contain an internal
  370. decimal point (either @samp{.} or @samp{,}); any excess precision not
  371. supported by the internal representation is truncated toward minus
  372. infinity. Such a number cannot be combined with any other date
  373. item, as it specifies a complete time stamp.
  374. @cindex beginning of time, for @acronym{POSIX}
  375. @cindex epoch, for @acronym{POSIX}
  376. Internally, computer times are represented as a count of seconds since
  377. an epoch---a well-defined point of time. On @acronym{GNU} and
  378. @acronym{POSIX} systems, the epoch is 1970-01-01 00:00:00 @sc{utc}, so
  379. @samp{@@0} represents this time, @samp{@@1} represents 1970-01-01
  380. 00:00:01 @sc{utc}, and so forth. @acronym{GNU} and most other
  381. @acronym{POSIX}-compliant systems support such times as an extension
  382. to @acronym{POSIX}, using negative counts, so that @samp{@@-1}
  383. represents 1969-12-31 23:59:59 @sc{utc}.
  384. Traditional Unix systems count seconds with 32-bit two's-complement
  385. integers and can represent times from 1901-12-13 20:45:52 through
  386. 2038-01-19 03:14:07 @sc{utc}. More modern systems use 64-bit counts
  387. of seconds with nanosecond subcounts, and can represent all the times
  388. in the known lifetime of the universe to a resolution of 1 nanosecond.
  389. On most hosts, these counts ignore the presence of leap seconds.
  390. For example, on most hosts @samp{@@915148799} represents 1998-12-31
  391. 23:59:59 @sc{utc}, @samp{@@915148800} represents 1999-01-01 00:00:00
  392. @sc{utc}, and there is no way to represent the intervening leap second
  393. 1998-12-31 23:59:60 @sc{utc}.
  394. @node Specifying time zone rules
  395. @section Specifying time zone rules
  396. @vindex TZ
  397. Normally, dates are interpreted using the rules of the current time
  398. zone, which in turn are specified by the @env{TZ} environment
  399. variable, or by a system default if @env{TZ} is not set. To specify a
  400. different set of default time zone rules that apply just to one date,
  401. start the date with a string of the form @samp{TZ="@var{rule}"}. The
  402. two quote characters (@samp{"}) must be present in the date, and any
  403. quotes or backslashes within @var{rule} must be escaped by a
  404. backslash.
  405. For example, with the @acronym{GNU} @command{date} command you can
  406. answer the question ``What time is it in New York when a Paris clock
  407. shows 6:30am on October 31, 2004?'' by using a date beginning with
  408. @samp{TZ="Europe/Paris"} as shown in the following shell transcript:
  409. @example
  410. $ export TZ="America/New_York"
  411. $ date --date='TZ="Europe/Paris" 2004-10-31 06:30'
  412. Sun Oct 31 01:30:00 EDT 2004
  413. @end example
  414. In this example, the @option{--date} operand begins with its own
  415. @env{TZ} setting, so the rest of that operand is processed according
  416. to @samp{Europe/Paris} rules, treating the string @samp{2004-10-31
  417. 06:30} as if it were in Paris. However, since the output of the
  418. @command{date} command is processed according to the overall time zone
  419. rules, it uses New York time. (Paris was normally six hours ahead of
  420. New York in 2004, but this example refers to a brief Halloween period
  421. when the gap was five hours.)
  422. A @env{TZ} value is a rule that typically names a location in the
  423. @uref{http://www.twinsun.com/tz/tz-link.htm, @samp{tz} database}.
  424. A recent catalog of location names appears in the
  425. @uref{http://twiki.org/cgi-bin/xtra/tzdate, TWiki Date and Time
  426. Gateway}. A few non-@acronym{GNU} hosts require a colon before a
  427. location name in a @env{TZ} setting, e.g.,
  428. @samp{TZ=":America/New_York"}.
  429. The @samp{tz} database includes a wide variety of locations ranging
  430. from @samp{Arctic/Longyearbyen} to @samp{Antarctica/South_Pole}, but
  431. if you are at sea and have your own private time zone, or if you are
  432. using a non-@acronym{GNU} host that does not support the @samp{tz}
  433. database, you may need to use a @acronym{POSIX} rule instead. Simple
  434. @acronym{POSIX} rules like @samp{UTC0} specify a time zone without
  435. daylight saving time; other rules can specify simple daylight saving
  436. regimes. @xref{TZ Variable,, Specifying the Time Zone with @code{TZ},
  437. libc, The GNU C Library}.
  438. @node Authors of get_date
  439. @section Authors of @code{get_date}
  440. @cindex authors of @code{get_date}
  441. @cindex Bellovin, Steven M.
  442. @cindex Salz, Rich
  443. @cindex Berets, Jim
  444. @cindex MacKenzie, David
  445. @cindex Meyering, Jim
  446. @cindex Eggert, Paul
  447. @code{get_date} was originally implemented by Steven M. Bellovin
  448. (@email{smb@@research.att.com}) while at the University of North Carolina
  449. at Chapel Hill. The code was later tweaked by a couple of people on
  450. Usenet, then completely overhauled by Rich $alz (@email{rsalz@@bbn.com})
  451. and Jim Berets (@email{jberets@@bbn.com}) in August, 1990. Various
  452. revisions for the @sc{gnu} system were made by David MacKenzie, Jim Meyering,
  453. Paul Eggert and others.
  454. @cindex Pinard, F.
  455. @cindex Berry, K.
  456. This chapter was originally produced by Fran@,{c}ois Pinard
  457. (@email{pinard@@iro.umontreal.ca}) from the @file{getdate.y} source code,
  458. and then edited by K.@: Berry (@email{kb@@cs.umb.edu}).