git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] date: make "iso-strict" conforming for the UTC timezone

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 13, 2024, 18:30 UTC
Message-ID
<xmqqwmq6asrx.fsf@gitster.g>
In-Reply-To
<20240313175000.2148-1-dev+git@drbeat.li>
"Beat Bolli" <bb@drbeat.li> writes:
> ISO 8601-1:2020-12 specifies that a zero timezone offset must be denoted
> with a "Z" suffix instead of the numeric "+00:00". Add the correponding
> special case to show_date() and a new test.

Hmph, would this break existing scripts that expects the current behaviour, and if it does, is it safe for us to blame the script authors for not following the standard?

Assuming that we do not need to worry about them, the patch itself looks perfectly reasonable to me.

Thanks.
Show 48 quoted lines
> Reported-by: Michael Osipov <michael.osipov@innomotics.com>
> Link: https://lore.kernel.org/git/410d458c-ae5b-40cc-9c8e-97b016c74a76@siemens.com/
> Signed-off-by: Beat Bolli <dev+git@drbeat.li>
> ---
>  date.c          | 14 +++++++++-----
>  t/t0006-date.sh |  1 +
>  2 files changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/date.c b/date.c
> index 619ada5b2044..44cf2221d81f 100644
> --- a/date.c
> +++ b/date.c
> @@ -342,14 +342,18 @@ const char *show_date(timestamp_t time, int tz, const struct date_mode *mode)
>  				tm->tm_hour, tm->tm_min, tm->tm_sec,
>  				tz);
>  	else if (mode->type == DATE_ISO8601_STRICT) {
> -		char sign = (tz >= 0) ? '+' : '-';
> -		tz = abs(tz);
> -		strbuf_addf(&timebuf, "%04d-%02d-%02dT%02d:%02d:%02d%c%02d:%02d",
> +		strbuf_addf(&timebuf, "%04d-%02d-%02dT%02d:%02d:%02d",
>  				tm->tm_year + 1900,
>  				tm->tm_mon + 1,
>  				tm->tm_mday,
> -				tm->tm_hour, tm->tm_min, tm->tm_sec,
> -				sign, tz / 100, tz % 100);
> +				tm->tm_hour, tm->tm_min, tm->tm_sec);
> +		if (tz == 0) {
> +			strbuf_addch(&timebuf, 'Z');
> +		} else {
> +			strbuf_addch(&timebuf, tz >= 0 ? '+' : '-');
> +			tz = abs(tz);
> +			strbuf_addf(&timebuf, "%02d:%02d", tz / 100, tz % 100);
> +		}
>  	} else if (mode->type == DATE_RFC2822)
>  		strbuf_addf(&timebuf, "%.3s, %d %.3s %d %02d:%02d:%02d %+05d",
>  			weekday_names[tm->tm_wday], tm->tm_mday,
> diff --git a/t/t0006-date.sh b/t/t0006-date.sh
> index e18b1602864e..1d228a981ee9 100755
> --- a/t/t0006-date.sh
> +++ b/t/t0006-date.sh
> @@ -46,6 +46,7 @@ check_show () {
>  TIME='1466000000 +0200'
>  check_show iso8601 "$TIME" '2016-06-15 16:13:20 +0200'
>  check_show iso8601-strict "$TIME" '2016-06-15T16:13:20+02:00'
> +check_show iso8601-strict "$(echo "$TIME" | sed 's/+0200$/+0000/')" '2016-06-15T14:13:20Z'
>  check_show rfc2822 "$TIME" 'Wed, 15 Jun 2016 16:13:20 +0200'
>  check_show short "$TIME" '2016-06-15'
>  check_show default "$TIME" 'Wed Jun 15 16:13:20 2016 +0200'
Previous: Beat BolliNext: Osipov, Michael (IN IT IN)
Message 3 of 10 in “log.date 'iso-strict' does not comply with ISO 8601-1:2020-12”
  1. Osipov, Michael (IN IT IN)Mar 13, 2024
  2. date: make "iso-strict" conforming for the UTC timezoneBeat Bolli, Mar 13, 2024
  3. Junio C HamanoMar 13, 2024
  4. Osipov, Michael (IN IT IN)Mar 13, 2024
  5. date: make "iso-strict" conforming for the UTC timezoneBeat Bolli, Mar 13, 2024
  6. Junio C HamanoMar 13, 2024
  7. date: make "iso-strict" conforming for the UTC timezoneBeat Bolli, Mar 13, 2024
  8. Junio C HamanoMar 13, 2024
  9. Osipov, Michael (IN IT IN)Mar 13, 2024
  10. Kristoffer HaugsbakkMar 13, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.