“ The time() function shall return the value of time [CX] [Option Start] in seconds since the Epoch. [Option End]”
So, Unix time is optionally seconds since the epoch, with no further guidance about leap seconds.
Also, the spec makes it clear that time_t needs to be converted into the appropriate time zone, which suggests it does not reflect leap seconds.
I’d be convinced by source code or documentation for both BSD and Linux showing they’re intentionally not posix compliant on this front, and apply leap seconds to Unix ticks and not their time zone conversions.
Posix defers to ISO C where they differ: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
See page 391. The encoding of Unix time is explicitly unspecified there.
Posix goes on to say: http://pubs.opengroup.org/onlinepubs/9699919799/
“ The time() function shall return the value of time [CX] [Option Start] in seconds since the Epoch. [Option End]”
So, Unix time is optionally seconds since the epoch, with no further guidance about leap seconds.
Also, the spec makes it clear that time_t needs to be converted into the appropriate time zone, which suggests it does not reflect leap seconds.
I’d be convinced by source code or documentation for both BSD and Linux showing they’re intentionally not posix compliant on this front, and apply leap seconds to Unix ticks and not their time zone conversions.