On 2014/08/18 15:46, Daurnimator wrote: > The %s specifier in strftime doesn't respect timezones. > > Example: > > #include <time.h> > #include <stdio.h> > > int main() { > time_t t = 1234567890; > struct tm *tmp = gmtime(&t); > char output[200]; > strftime(output, 200, "%s", tmp); > printf("%s\n",output); > return 0; > } > > Run with a non UTC timezone. e.g. TZ=GMT+9 > Output will be 1234600290 instead of expected 1234567890 > > Location in OpenBSD's libc: > http://anoncvs.estpak.ee/cgi-bin/cgit/openbsd-src/tree/lib/libc/time/strftime.c#n300 > > This bug also exists in FreeBSD's libc: > https://svnweb.freebsd.org/base/release/10.0.0/lib/libc/stdtime/strftime.c?view=markup#l312 > Bug filed at https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=192016 > > This bug also exists in glibc: > http://fossies.org/dox/glibc-2.19/strftime__l_8c_source.html#l01133 > Bug filed at https://sourceware.org/bugzilla/show_bug.cgi?id=17189 > > It does not occur in musl: > http://git.musl-libc.org/cgit/musl/tree/src/time/strftime.c?id=ac0acd569e01735fc6052d43fdf57f3a07c93f3d#n127 >
%s is not specified by posix/sus, so it is implementation-specific. That said, given that you have just found 3 implementations which have the same (frankly IMHO sensible) behaviour, musl seems to be the odd one out.