2015-04-22 2 views
23

std::chrono::time_point::time_since_epoch() возвращает duration, упомянутый в некотором time_point в прошлом. Когда такой time_point? Это зависит от реализации C++ или определяется стандартом C++? Или это де-факто стандарт, чтобы установить эпоху до 1 января 1970 UTC?Когда есть std :: chrono epoch?

+2

'epoch' в целом представляет собой отправную точку для часов. В 'C++ 11 chrono' имеется более одного часа. – bolov

+0

http://en.cppreference.com/w/cpp/chrono/time_point/time_since_epoch – SChepurin

+1

В этой статье объясняется это: http://www.informit.com/articles/article.aspx?p=1881386&seqNum=2 – newbie

ответ

31

Это функция как конкретного clock, так и его реализация clock. Стандарт определяет три различных часов:

  • system_clock
  • steady_clock
  • high_resolution_clock

И стандарт не определяет эпоху для любого из этих часов.

Программисты (вы) также можете создавать собственные часы, которые могут или не могут указывать эпоху.

Существует де-факто (неофициальный) стандарт, согласно которому std::chrono::system_clock::time_point имеет эпоху, соответствующую Unix Time. Это определяется как продолжительность времени, прошедшая с 00:00:00 координированного универсального времени (UTC), четверг, 1 января 1970 года, не считая секунд прыжка.

Fwiw, here is a date/time library, который использует этот де-факто стандарт.

Нет стандартного де-факто для двух других стандартных часов. Дополнительно high_resolution_clock разрешено быть псевдонимом типа для system_clock или steady_clock.

На OS X, high_resolution_clock типа псевдоним steady_clock и steady_clock является подсчетом наносекунд, так как компьютер не загружается (никакого отношения к UTC).

+1

Для будущего читатели: есть ли у вас список ссылок на официальную документацию, где можно проверить, действительно ли это так? – MikeMB

+1

Вот все документы на C++: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/ Среди этих документов будут проекты стандарта C++, которые содержат официальную спецификацию для '' , Официальная спецификация C++ 14 - http://www.open-std.org/jtc1/sc22/wg21/prot/14882fdis/n4141.pdf, но она не доступна. Однако http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf является следующим проектом после этого и должен быть достаточно близко. Текущий проект C++ 17 - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4618.pdf –

+0

Большое спасибо, я должен был уточнить: I означает, что есть какая-либо документация о фактическом поведении различных стандартных реализаций библиотек в отношении 'std :: chrono :: system_clock'. Это позволило бы избежать необходимости писать специфичные для платформы унитаты для проверки этого поведения. – MikeMB

Смежные вопросы