На этот вопрос есть два ответа, и я попытаюсь ответить на них обоих.
system_clock
был представлен в C ++ 11, и его эпоха осталась неуказанной.Таким образом, технический ответ на ваш вопрос: да, возможно, что эпоха system_clock
может быть скорректирована на основе системного часового пояса.
Но это еще не конец истории.
Есть только несколько реализаций system_clock
, и все они модели Unix Time . Unix Time является мерой продолжительности времени с 1970-01-01 00:00:00 UTC, исключая високосные секунды.Он не зависит от часового пояса системы.
Проект спецификации C ++ 20 стандартизирует эту существующую практику.
Таким образом, с практической точки зрения ответ на ваш вопрос: нет, этоЭпоха system_clock
не может быть настроена на основе системного часового пояса.
Одна вещь, которая может сбить вас с толку, состоит в том, что system_clock
обычно считает время в единицах, меньших, чем миллисекунды.Он варьируется от платформы к платформе, и вы можете проверить, что это такое с system_clock::duration::period::num
и system_clock::duration::period::den
.Это две интегральные константы времени компиляции, которые образуют дробь, n/d
, которая описывает отрезок времени в секундах, измеряемый system_clock
.Для Ubuntu, я думаю, это будет фракция 1/1'000'000'000
или nanoseconds
.
Вы можете получить milliseconds
(или любую другую единицу измерения) из system_clock::time_point
с:
auto tp = time_point_cast<milliseconds>(system_clock::now());