pretty: provide a strict ISO 8601 date format
Git's "ISO" date format does not really conform to the ISO 8601 standard due to small differences, and it cannot be parsed by ISO 8601-only parsers, e.g. those of XML toolchains. The output from "--date=iso" deviates from ISO 8601 in these ways: - a space instead of the `T` date/time delimiter - a space between time and time zone - no colon between hours and minutes of the time zone Add a strict ISO 8601 date format for displaying committer and author dates. Use the '%aI' and '%cI' format specifiers and add '--date=iso-strict' or '--date=iso8601-strict' date format names. See http://thread.gmane.org/gmane.comp.version-control.git/255879 and http://thread.gmane.org/gmane.comp.version-control.git/52414/focus=52585 for discussion. Signed-off-by: Beat Bolli <bbolli@ewanet.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
6c4ab27f23
commit
466fb6742d
14
date.c
14
date.c
@ -200,7 +200,16 @@ const char *show_date(unsigned long time, int tz, enum date_mode mode)
|
||||
tm->tm_mday,
|
||||
tm->tm_hour, tm->tm_min, tm->tm_sec,
|
||||
tz);
|
||||
else if (mode == DATE_RFC2822)
|
||||
else if (mode == DATE_ISO8601_STRICT) {
|
||||
char sign = (tz >= 0) ? '+' : '-';
|
||||
tz = abs(tz);
|
||||
strbuf_addf(&timebuf, "%04d-%02d-%02dT%02d:%02d:%02d%c%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);
|
||||
} else if (mode == DATE_RFC2822)
|
||||
strbuf_addf(&timebuf, "%.3s, %d %.3s %d %02d:%02d:%02d %+05d",
|
||||
weekday_names[tm->tm_wday], tm->tm_mday,
|
||||
month_names[tm->tm_mon], tm->tm_year + 1900,
|
||||
@ -751,6 +760,9 @@ enum date_mode parse_date_format(const char *format)
|
||||
else if (!strcmp(format, "iso8601") ||
|
||||
!strcmp(format, "iso"))
|
||||
return DATE_ISO8601;
|
||||
else if (!strcmp(format, "iso8601-strict") ||
|
||||
!strcmp(format, "iso-strict"))
|
||||
return DATE_ISO8601_STRICT;
|
||||
else if (!strcmp(format, "rfc2822") ||
|
||||
!strcmp(format, "rfc"))
|
||||
return DATE_RFC2822;
|
||||
|
Reference in New Issue
Block a user