Index | Thread | Search

From:
Stuart Henderson <stu@spacehopper.org>
Subject:
Re: ts(1) - ISO8601 as default format
To:
Job Snijders <job@bsd.nl>
Cc:
tech@openbsd.org
Date:
Mon, 2 Nov 2026 15:01:00 +0000

Download raw body.

Thread
  • Job Snijders:

    ts(1) - ISO8601 as default format

  • Klemens Nanni:

    ts(1) & ISO8601 by default (Was: httpd: add timestamps to fastcgi error log)

  • On 2026/11/02 14:50, Job Snijders wrote:
    > On Mon, Nov 02, 2026 at 02:38:43PM +0100, Christian Schulte wrote:
    > > Do not use 'Z'. Use '%z'.
    > 
    > Sure... but let's save some space in case it is +0000. Maybe like so?
    > 
    > This changes the ts(1) default format to ISO8601.
    > 
    > Index: ts.1
    > ===================================================================
    > RCS file: /cvs/src/usr.bin/ts/ts.1,v
    > diff -u -p -r1.8 ts.1
    > --- ts.1	3 Jul 2022 16:55:39 -0000	1.8
    > +++ ts.1	2 Nov 2026 14:48:34 -0000
    > @@ -52,7 +52,7 @@ specifications described in the
    >  .Xr strftime 3
    >  manual page.
    >  The default format is
    > -.Qq %b %d %H:%M:%S ;
    > +.Qq %Y-%m-%dT%H:%M:%S%z ;
    >  or
    >  .Qq %H:%M:%S
    >  if one of the
    > @@ -79,9 +79,9 @@ and
    >  .Qq 4:20:00.00001 .
    >  .Sh EXAMPLES
    >  .Bd -literal -offset indent
    > -$ (echo foo; sleep 2; echo bar) | ts
    > -Jun 28 12:13:38 foo
    > -Jun 28 12:13:40 bar
    > +$ (echo foo; sleep 2; echo bar) | TZ=Etc/UTC ts
    > +2026-11-02T14:24:50Z foo
    > +2026-11-02T14:24:52Z bar
    >  
    >  $ ls | ts -i %.S
    >  00.000452 CVS
    > Index: ts.c
    > ===================================================================
    > RCS file: /cvs/src/usr.bin/ts/ts.c,v
    > diff -u -p -r1.11 ts.c
    > --- ts.c	11 Oct 2022 07:36:27 -0000	1.11
    > +++ ts.c	2 Nov 2026 14:48:34 -0000
    > @@ -34,7 +34,7 @@ struct usec {
    >  	char *pos;
    >  };
    >  
    > -static char		*format = "%b %d %H:%M:%S";
    > +static char		*format;
    >  static char		*buf;
    >  static char		*outbuf;
    >  static size_t		 bufsize;
    > @@ -44,6 +44,17 @@ static void		 fmtfmt(void);
    >  static void		 fmtprint(const struct timespec *);
    >  static void __dead	 usage(void);
    >  
    > +static int
    > +localtz_is_utc(void)
    > +{
    > +	time_t now;
    > +	struct tm *local;
    > +
    > +	now = time(NULL);
    > +	local = localtime(&now);
    > +	return local->tm_gmtoff == 0;
    > +}
    > +
    >  int
    >  main(int argc, char *argv[])
    >  {
    > @@ -87,6 +98,12 @@ main(int argc, char *argv[])
    >  
    >  	if (argc == 1)
    >  		format = *argv;
    > +	else {
    > +		if (localtz_is_utc())
    > +			format = "%Y-%m-%dT%H:%M:%SZ";
    > +		else
    > +			format = "%Y-%m-%dT%H:%M:%S%z";
    > +	}
    >  
    >  	bufsize = strlen(format) + 1;
    >  	if (bufsize > SIZE_MAX / 10)
    > 
    
    that messes up the formatting if run across a DST change in +0000/+0100
    timezones (Europe/Dublin, Europe/Jersey, Europe/London, etc).
    
    
  • Job Snijders:

    ts(1) - ISO8601 as default format

  • Klemens Nanni:

    ts(1) & ISO8601 by default (Was: httpd: add timestamps to fastcgi error log)