pub fn parse(input: &str, now: Option<Zoned>) -> Result<Time, Exn<Error>>Expand description
Parse input as any time that Git can parse when inputting a date.
§Examples
§1. SHORT Format
2018-12-241970-01-011950-12-312024-12-31
§2. RFC2822 Format
Thu, 18 Aug 2022 12:45:06 +0800Mon Oct 27 10:30:00 2023 -0800
§3. GIT_RFC2822 Format
Thu, 8 Aug 2022 12:45:06 +0800Mon Oct 27 10:30:00 2023 -0800(Note the single-digit day)
§4. ISO8601 Format
2022-08-17 22:04:58 +02001970-01-01 00:00:00 -0500
§5. ISO8601_STRICT Format
2022-08-17T21:43:13+08:00
§6. UNIX Timestamp (Seconds Since Epoch)
1234567890(January 1, 1970 UTC)-10001700000000
§7. Commit Header Format
1745582210 +02001660874655 +0800-1660874655 +0800
A leading @ may introduce either of the two forms above, as in @1745582210 +0200
or @1700000000.
See also the parse_header().
§8. GITOXIDE Format
Thu Sep 04 2022 10:45:06 -0400Mon Oct 27 2023 10:30:00 +0000
§9. DEFAULT Format
Thu Sep 4 10:45:06 2022 -0400Mon Oct 27 10:30:00 2023 +0000
§10. Relative Dates (e.g., “2 minutes ago”)
These dates are parsed relative to now, whose time zone controls calendar arithmetic.
The examples depend entirely on the value of now.
If now is October 27, 2023 at 10:00:00 UTC:
* 2 minutes ago (October 27, 2023 at 09:58:00 UTC)
* 3 hours ago (October 27, 2023 at 07:00:00 UTC)
The forms understood are now, today, yesterday, and one or more <count> <unit> pairs,
as in 2 days 3 hours ago. A count may be spelled out from one to ten, or be last, and
any byte that is neither a digit nor a letter separates the parts, so 1.hour.ago is the same
as 1 hour ago. The trailing ago is optional.
<count> <unit> pairs are applied in input order, the way Git applies them: second through week each
subtract a fixed number of seconds, while month and year step down the respective calendar fields,
leaving the day of the month alone.
A day beyond the end of the shorter target month rolls over into the following month: one month before
May 31st is May 1st, not April 30th.
Note that there is no way to name a time in the future: Git has none either, so 1 hour from now is an hour in the past to it, and to this function.