Что такое конвертер Unix timestamp?
Unix timestamp (его также называют epoch-время или «эпоха Unix») — это количество секунд, прошедших с 00:00:00 UTC 1 января 1970 года, без учёта високосных секунд. Этот инструмент превращает одно целое число в понятную человеку календарную дату и время по UTC, включая день недели.
Как пользоваться
Вставьте или введите Unix timestamp в секундах (например, 1700000000) и нажмите кнопку. Калькулятор покажет год, месяц, день, часы, минуты и секунды по UTC, а также день недели и общее число дней, прошедших с начала эпохи.
Как работает формула
Сначала секунды разделяются: дни = floor(ts / 86400), а остаток даёт время суток. Затем число дней преобразуется в календарную дату по известному алгоритму Говарда Хиннанта «days_from_civil» (обратное преобразование). В нём год условно начинается с марта, поэтому високосный день оказывается в конце года — это избавляет от множества частных случаев. День недели вычисляется как \((\text{days} + 4) \bmod 7\), ведь 1 января 1970 года было четвергом.
$$\text{Days} = \left\lfloor \frac{\text{Timestamp}}{86400} \right\rfloor, \qquad s = \text{Timestamp} \bmod 86400$$$$\text{where}\quad \left\{ \begin{aligned} \text{Hour} &= \left\lfloor \frac{s}{3600} \right\rfloor \\ \text{Minute} &= \left\lfloor \frac{s \bmod 3600}{60} \right\rfloor \\ \text{Second} &= s \bmod 60 \\ (\text{Y},\text{M},\text{D}) &= \text{civil}(\text{Days}) \end{aligned} \right.$$
Разбор примера
Для \(ts = 1\,700\,000\,000\): дней = 19675, остаток = 72800 секунд = 22:13:20. Алгоритм календарной даты сопоставляет день 19675 с датой 2023-11-14. Итоговый результат — 2023-11-14 22:13:20 UTC.
$$\text{Days} = \left\lfloor \frac{1\,700\,000\,000}{86400} \right\rfloor = 19675, \qquad s = 1\,700\,000\,000 \bmod 86400 = 72800$$Частые вопросы
Учитываются ли часовые пояса? Нет — результат всегда в UTC. Чтобы получить местное время, прибавьте смещение вашего часового пояса относительно UTC (например, для Москвы это +3 часа).
А как быть с миллисекундами? Вводите только секунды. Если у вас timestamp в миллисекундах, сначала разделите его на 1000.
Почему не учитываются високосные секунды? Само Unix-время по определению игнорирует високосные секунды, поэтому и этот конвертер их не учитывает.