From 0693e6b246053d31c0eb405c6abe9db8a4d00aaf Mon Sep 17 00:00:00 2001 From: =?utf8?q?=D0=BD=D0=B0=D0=B1?= Date: Fri, 8 Sep 2023 17:28:57 +0200 Subject: [PATCH] journalctl -o short-iso[-precise]: timezone as +02:00 instead of +0200 --- man/journalctl.xml | 3 ++- src/shared/logs-show.c | 25 +++++++++++++------------ 2 files changed, 15 insertions(+), 13 deletions(-) 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: -- 2.47.3