date.c: skip fractional second part of ISO-8601
authorĐoàn Trần Công Danh <congdanhqx@gmail.com>
Fri, 24 Apr 2020 15:07:31 +0000 (22:07 +0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 24 Apr 2020 21:06:09 +0000 (14:06 -0700)
commitb784840ca84c708708d1ab0b872eb3a6fb3200b5
treeb7703b71375dfb0c06989cfe5ef3fdbf0e37ae1b
parent4f89f4fc9ac494fde3f3bede19a7599f77afe8dc
date.c: skip fractional second part of ISO-8601

git-commit(1) says ISO-8601 is one of our supported date format.

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.

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

While doing this, make sure that we only interpret the number after the
second and the dot as fractional when and only when the date is known,
since only ISO-8601 allows the fractional part, and we've taught our
users to interpret "12:34:56.7.days.ago" as a way to specify a time
relative to current time.

Reported-by: Brian M. Carlson <sandals@crustytoothpaste.net>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/date-formats.txt
date.c
t/t0006-date.sh