On Tuesday 16 February 2016, Karel Zak wrote: > On Thu, Feb 11, 2016 at 07:48:40PM -0500, J William Piggott wrote: > > - lt = localtime(&hwctime.tv_sec); > > - strftime(ctime_now, sizeof(ctime_now), format, lt); > > - printf(_("%s and %06d microseconds\n"), ctime_now, > > (int)hwctime.tv_usec); + struct tm lt; > > + int zhour, zmin; > > + > > + lt = *localtime(&hwctime.tv_sec); > > + zhour = - timezone / 60 / 60; > > + zmin = abs(timezone / 60 % 60); > > + printf(_("%4d-%.2d-%.2d %02d:%02d:%02d.%06d%+02d:%02d\n"), > > + lt.tm_year + 1900, lt.tm_mon + 1, lt.tm_mday, lt.tm_hour, > > + lt.tm_min, lt.tm_sec, (int)hwctime.tv_usec, zhour, zmin); > > Some notes: > > * what's wrong with strftime? For me strftime always "sounds" locale and system dependent. If we don't want to use locale anyways then I would prefer printf to make this clear for the reader. On the other hand if someone knows that our choosen ISO style is portable and locale independent implemented in any system's strftime, ok to use strftime then. > * We already use ISO time in util-linux and we use time designator > 'T' (separator between date and time). I know that "T" is the best compromise. Anyways for humans I try to use space if possible. It simply looks better. IMO more important is that any parser code would accept space as well as 'T'. > * tv_usec is "long" > > * fraction separator is decimal mark, either a comma or a dot, but > with a preference for a comma according to ISO 8601:2004 > (wikipedia). > > -- we already use comma in util-linux, exception is logger where I > see dot :-( Where do we use comma? Usually I would prefer dot (for decimal fractions of seconds). I guess most people use dot and would be confused about comma. Existing software may more likely not accept comma. Like this example https://github.com/moment/moment/issues/2580 > Anyway, it would be really nice to have a function for this purpose > in lib/timeutils.c to avoid duplication and creativity :-) Something > like: > > > strtime_iso_8601(char buf, size_t bufsz, struct tm tm, struct > timeval frac, int flags); > > where flags are > > enum { > ISO_8601_TIMEZONE = (1 << 1) > ISO_8601_USEC = (1 << 2) > ... > }; > > then we can use this function in lslogins, dmesg, hwclock, last, > logger, ... etc. I can also imagine: > > strtime_short_ctime() > strtime_ctime() (ctime without \n) > > Comments? > > Karel -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html