Является ли clock_gettime временем UTC или местным часовым поясом? - PullRequest
8 голосов
/ 16 декабря 2011

Функция clock_gettime возвращает метку времени, измеренную в эпоху в UTC или в местном часовом поясе?

Я знаю, что time должно быть в эпоху UTC, но я не могу 'не найти ссылки, говорящие, что то же самое верно для clock_gettime.

Ответы [ 3 ]

15 голосов
/ 16 декабря 2011

Цитируя Википедию, эпоха Unix определяется как

время 00:00:00 UTC 1 января 1970 г. (или 1970-01-01T00: 00: 00Z ISO 8601).

Из этого следует, что любая ссылка на «Эпоху» подразумевает UTC.

5 голосов
/ 16 декабря 2011

На самом деле вопрос не имеет большого смысла. См. time (7) для обзора функций, связанных со временем.

Любое устройство с часами возвращает время, измеренное из какого-либо события источника в прошлом. Соглашение Unix (и Posix) состоит в том, чтобы измерять его с Epoch (начало 1970 года, как объясняет ответ aix ).

Отображение некоторого времени в UTC, или по местному времени, или с использованием французского революционного календаря, или с использованием календаря майя, или любого другого календаря из любой интересующей вас культуры, не меняет это время. Изменяется только отображение (или показанная форма) этого времени.

Это немного похоже на то, что два , deux , 1 + 1 , или 2 , или 10b -с b означает двоичное значение - все представления того же числа.

Возвращаясь к вопросу, справочная страница в clock_gettime дает точный ответ на вопрос. Это зависит от clk_id, который вы запрашиваете, а для CLOCK_REALTIME время измеряется с начала эпохи Unix. Для других часов (например, CLOCK_MONOTONIC) используемый источник не указан.

(Меня очень печально удивляет количество вопросов, на которые можно очень быстро ответить, взглянув на man . Я не понимаю логику того, что люди тратят больше времени, чтобы задать вопрос вот что посмотреть - просто набрав man clock_gettime на своем Linux-боксе - на страницах руководства).

Понятие часового пояса относится только к struct tm, как возвращено функциями localtime & gmtime (и связанными с ними). Время (например, некоторое time_t), измеренное с эпохи (например, результат time (2) , gettimeofday , clock_gettime с CLOCK_REALTIME) не имеет часового пояса.

Эпоха Unix - 01 января 1970 года 0:00 UTC (по определению (time_t)0). В моем часовом поясе (МЕТ = Париж / Франция) та же самая Эпоха - Чт 1 января 01:00:00 МЕТ 1970.

0 голосов
/ 04 декабря 2013

это зависит ..

если вы позвоните clock_gettime(1), вполне вероятно, что эпоха - это время, когда ваш Linux запустился.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...