Как рассчитать день эпохи?
Является ли вычисление дня эпохи таким же простым, как считывание секунд эпохи и деление на 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 года. Деления в формуле являются целочисленными делениями; то есть остаток отбрасывается, оставляя только целое число.