Получить эпоху POSIX как system_clock::time_point

Я знаю, что значение по умолчанию std::chrono::system_clock::time_point это эпоха часов, но я не могу найти мандат в стандарте C++11, который system_clockЭпоха совпадает с эпохой POSIX (1970-01-01T00:00:00Z). Можно ли предположить, что в Linux и Windows это так? Или было бы разумнее использовать std::chrono::system_clock::from_time_t(0)?

1 ответ

Решение

Стандарт покидает эпоху std::chrono::system_clock::time_point неопределенные.

Есть три реализации std::chrono::system_clock::time_point Я знаю о:

  1. LibC++
  2. libstdC++
  3. В.С.

Все три из них - тонкие обертки вокруг Unix Time, которое подсчитывает количество секунд, прошедших с 00:00:00 UTC, четверг, 1 января 1970 года, не считая високосных секунд.

Все они основаны на 64-битном целочисленном типе со знаком. Ни один из них не является устойчивым. libC++ имеет тиковый период микросекунд. libstdC++ имеет тиковый период наносекунд, а VS имеет тиковый период 0,1 микросекунды.

В случае, если это полезно, вот документ, который демонстрирует некоторую формулу, чтобы использовать в своих интересах неопределенную, но общую эпоху для преобразования туда и обратно из гражданского календаря, не проходя через time_t,

Преимущество использования std::chrono::system_clock::from_time_t является то, что он гарантированно работает по стандарту. Недостатком является то, что на практике это ограничит вас точностью до секунды (хотя эта точность не указана).

Преимущество принятия эпохи std::chrono::system_clock быть 1970-01-01, даже если это не определено, означает, что вы будете правы во всех известных реализациях, и точность, доступная для этой альтернативы, намного выше, чем обеспечиваемая time_t,

Другие вопросы по тегам