https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92616
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I see the same result when using clock_gettime directly instead of
system_clock::now()
#include <time.h>
#include <iostream>
#include <iomanip>
#include <thread>
void dumpNow() {
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
auto const nowSc = ts.tv_sec;
auto const now = time(nullptr);
tm nowTm;
localtime_r(&nowSc, &nowTm);
std::cout << "Now (sc) time is " << ts.tv_sec << std::setw(9) <<
std::setfill('0') << ts.tv_nsec
<< " (system clock)\n=>" << nowSc << "(time_t)\n=>" <<
nowTm.tm_hour
<< ":" << nowTm.tm_min << ":" << nowTm.tm_sec << std::endl;
localtime_r(&now, &nowTm);
std::cout << "Now (time(nullptr)) time is " << now << "(time_t)\n=>"
<< nowTm.tm_hour << ":" << nowTm.tm_min << ":" << nowTm.tm_sec
<< std::endl;
}
int main() {
dumpNow();
std::this_thread::sleep_until(
std::chrono::system_clock::from_time_t(time(nullptr) + 2));
dumpNow();
}
Now (sc) time is 1574343394343888130 (system clock)
=>1574343394(time_t)
=>13:36:34
Now (time(nullptr)) time is 1574343394(time_t)
=>13:36:34
Now (sc) time is 1574343396000083583 (system clock)
=>1574343396(time_t)
=>13:36:36
Now (time(nullptr)) time is 1574343395(time_t)
=>13:36:35