Как рассчитать день эпохи?

Является ли вычисление дня эпохи таким же простым, как считывание секунд эпохи и деление на 86400? Или есть какие-то особые расчеты, которые необходимо сделать, чтобы учесть летнее время, високосный год или какой-то другой фактор?

Обновление: под "днем эпохи" я подразумеваю количество дней с начала эпохи.

1 ответ

Решение

POSIX определяет, что вы можете определить количество дней с начала эпохи (1970-01-01 00:00:00Z), разделив отметку времени на 86400. Это сознательно и сознательно игнорирует високосные секунды.

Смотрите определение " Секунды со времен":

4.15 секунды с начала эпохи

Значение, которое приблизительно соответствует количеству секунд, прошедших с начала эпохи. Имя всемирного координированного времени (указывается в секундах (tm_sec), минут (tm_min), часы (tm_hour), дни с 1 января года (tm_yday) и календарный год минус 1900 (tm_year)) относится ко времени, представленному в секундах с начала эпохи, согласно приведенному ниже выражению.

Если год <1970 или значение отрицательное, отношение не определено. Если год >=1970 и значение неотрицательное, значение связано с именем универсального координированного времени в соответствии с выражением на языке C, где tm_sec, tm_min, tm_hour, tm_yday, а также tm_year все целочисленные типы:

tm_sec + tm_min*60 + tm_hour*3600 + tm_yday*86400 +
     (tm_year-70)*31536000 + ((tm_year-69)/4)*86400 -
     ((tm_year-1)/100)*86400 + ((tm_year+299)/400)*86400

Соотношение между фактическим временем дня и текущим значением в секундах с начала эпохи не определено.

То, как любые изменения в значении секунд с начала эпохи выполняются для выравнивания с желаемыми отношениями с текущим фактическим временем, определяется реализацией. Как показано в секундах с начала эпохи, каждый день должен составлять ровно 86400 секунд.

Примечание. Последние три условия выражения добавляются в день для каждого года, следующего за високосным, начиная с первого високосного года с начала эпохи. Первый член добавляет день каждые 4 года, начиная с 1973 года, второй вычитает день обратно каждые 100 лет, начиная с 2001 года, а третий добавляет день назад каждые 400 лет, начиная с 2001 года. Деления в формуле являются целочисленными делениями; то есть остаток отбрасывается, оставляя только целое число.

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