POSIX says about `touch -t [[CC]YY]MMDDhhmm[.SS]`: > If SS is not given a value, it is assumed to be zero. http://pubs.opengroup.org/onlinepubs/9699919799/utilities/touch.html Busybox touch does not set it to zero, instead it uses the localtime's seconds. To reproduce: TZ=UTC strace busybox touch -t 197001010000 /tmp/foo ... utimensat(AT_FDCWD, "/tmp/foo", [{23, 0}, {23, 0}], 0) = 0 ... note that utimesat(2) is called with the seconds part to 23. Doing the same with the .ss specified will correctly set the seconds part to 0: TZ=UTC strace busybox touch -t 197001010000.00 /tmp/foo ... utimensat(AT_FDCWD, "/tmp/foo", [{0, 0}, {0, 0}], 0) = 0 ... The reason is that the time_t struct is initialized with localtime instead of zero: https://git.busybox.net/busybox/tree/coreutils/touch.c#n155
fixed with commit b684d1b1864ba9d7968de5565823f8e42f1dc448