[PATCH v2 0/2] More ISO-8601 support
- From
Đoàn Trần Công Danh <congdanhqx@gmail.com>
- Date
- Apr 15, 2020, 03:31 UTC
- Message-ID
- <cover.1586921235.git.congdanhqx@gmail.com>
- In-Reply-To
- <cover.1586856398.git.congdanhqx@gmail.com>
This series aims to extend support for ISO-8601 datetime format to allow compact version, and fractional part of ISO-8601.
Đoàn Trần Công Danh (2): date.c: skip fractional second part of ISO-8601 date.c: allow compact version of ISO-8601 datetime
Documentation/date-formats.txt | 2 +- date.c | 24 ++++++++++++++++++++++++ t/t0006-date.sh | 5 +++++ 3 files changed, 30 insertions(+), 1 deletion(-)
Range-diff against v1:
1: d7d74b03cc ! 1: 03f3e9968b date.c: allow fractional second part of ISO-8601
@@ Metadata
Author: Đoàn Trần Công Danh <congdanhqx@gmail.com>
## Commit message ##
- date.c: allow fractional second part of ISO-8601
+ date.c: skip fractional second part of ISO-8601
git-commit(1) says ISO-8601 is one of our supported date format.
- However, we only support RFC-3339 date format.
- We can either:
- - Update documentation from ISO-8601 to RFC-3339
- - Add full support for ISO-8601
+ ISO-8601 allows timestamps to have a fractional number of seconds.
+ We represent time only in terms of whole seconds, so we never bothered
+ parsing fractional seconds. However, it's better for us to parse and
+ throw away the fractional part than to refuse to parse the timestamp
+ at all.
- This series will try to add full support for ISO-8601.
+ And refusing parsing fractional second part may confuse the parse to
+ think fractional and timezone as day and month in this example:
+
+ 2008-02-14 20:30:45.019-04:00
Reported-by: Brian M. Carlson <sandals@crustytoothpaste.net>
Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
+ ## Documentation/date-formats.txt ##
+@@ Documentation/date-formats.txt: RFC 2822::
+ ISO 8601::
+ Time and date specified by the ISO 8601 standard, for example
+ `2005-04-07T22:13:13`. The parser accepts a space instead of the
+- `T` character as well.
++ `T` character as well. The fractional part will be ignored.
+ +
+ NOTE: In addition, the date part is accepted in the following formats:
+ `YYYY.MM.DD`, `MM/DD/YYYY` and `DD.MM.YYYY`.
+
## date.c ##
@@ date.c: static int match_multi_number(timestamp_t num, char c, const char *date,
case ':':
@@ t/t0006-date.sh: check_parse 2008-02 bad
check_parse 2008-02-14 bad
check_parse '2008-02-14 20:30:45' '2008-02-14 20:30:45 +0000'
check_parse '2008-02-14 20:30:45 -0500' '2008-02-14 20:30:45 -0500'
++check_parse '2008.02.14 20:30:45 -0500' '2008-02-14 20:30:45 -0500'
+check_parse '2008-02-14 20:30:45.019-04:00' '2008-02-14 20:30:45 -0400'
check_parse '2008-02-14 20:30:45 -0015' '2008-02-14 20:30:45 -0015'
check_parse '2008-02-14 20:30:45 -5' '2008-02-14 20:30:45 +0000'
2: 48284386c9 < -: ---------- date.c: allow compact version of ISO-8601 datetime
-: ---------- > 2: 36517af872 date.c: allow compact version of ISO-8601 datetime-- 2.26.0.485.g42af89717d