diff --git a/man/journalctl.xml b/man/journalctl.xml
index df79e6d6e2..8ac5400841 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.
@@ -480,15 +481,6 @@
-
-
-
- Truncate each log message at the first newline character on output, so that only the
- first line of each message is displayed.
-
-
-
-
is very similar, but shows classic syslog timestamps with full microsecond
@@ -613,6 +605,15 @@
+
+
+
+ Truncate each log message at the first newline character on output, so that only the
+ first line of each message is displayed.
+
+
+
+
diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
index 0130e747bf..a574870cb7 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: