From: наб Date: Fri, 8 Sep 2023 15:28:57 +0000 (+0200) Subject: journalctl -o short-iso[-precise]: timezone as +02:00 instead of +0200 X-Git-Tag: v255-rc1~413^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F29134%2Fhead;p=thirdparty%2Fsystemd.git journalctl -o short-iso[-precise]: timezone as +02:00 instead of +0200 --- diff --git a/man/journalctl.xml b/man/journalctl.xml index 9054cc8ded0..8ac54008417 100644 --- a/man/journalctl.xml +++ b/man/journalctl.xml @@ -467,7 +467,8 @@ - is very similar, but shows ISO 8601 wallclock timestamps. + is very similar, but shows timestamps in the + RFC 3339 profile of ISO 8601. diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c index abe11b817c8..deceea5da99 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -403,24 +403,25 @@ static int output_timestamp_realtime( break; case OUTPUT_SHORT_ISO: - if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S%z", - localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)) <= 0) + case OUTPUT_SHORT_ISO_PRECISE: { + size_t tail = strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S", + localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)); + if (tail == 0) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to format ISO time"); - break; - case OUTPUT_SHORT_ISO_PRECISE: { - char usec[7]; + /* No usec in strftime, need to append */ + if (mode == OUTPUT_SHORT_ISO_PRECISE) { + snprintf(buf + tail, ELEMENTSOF(buf) - tail, ".%06"PRI_USEC, display_ts->realtime % USEC_PER_SEC); + tail += 7; + } - /* No usec in strftime, so we leave space and copy over */ - if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S.xxxxxx%z", - localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)) <= 0) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "Failed to format ISO-precise time"); - xsprintf(usec, "%06"PRI_USEC, display_ts->realtime % USEC_PER_SEC); - memcpy(buf + 20, usec, 6); + int8_t h = tm.tm_gmtoff / 60 / 60; + int8_t m = labs((tm.tm_gmtoff / 60) % 60); + snprintf(buf + tail, ELEMENTSOF(buf) - tail, "%+03"PRId8":%02"PRId8, h, m); break; } + case OUTPUT_SHORT: case OUTPUT_SHORT_PRECISE: