Что такое UNIX-время?
UNIX-время (его также называют UNIX timestamp или POSIX-время) — это количество секунд, прошедших с начала отсчёта UNIX, то есть с момента 1970-01-01 00:00:00 UTC. Это универсальный, не зависящий от языка способ представить любой момент времени одним целым числом. Он повсеместно используется в программировании, в логах, базах данных и API. Високосные секунды при этом не учитываются — каждые сутки считаются ровно за 86 400 секунд.
Как пользоваться калькулятором
Введите календарную дату (год, месяц, день) и время (час, минуту, секунду) так, как они показаны на обычных «настенных» часах в вашем часовом поясе. Затем в поле «Сдвиг относительно UTC» укажите смещение этого местного времени в часах. Например, для Японии это +9, для Индии +5,5, а для тихоокеанского стандартного времени США (PST) — −8. По умолчанию задан сдвиг +9 (японское время). Если оставить часы, минуты и секунды пустыми, они будут считаться равными нулю.
Как работает формула
Сначала дата переводится в число дней с помощью алгоритма «days-from-civil» (автор — Говард Хиннант). Он корректно отсчитывает дни от эпохи для любой даты по григорианскому календарю, включая високосные годы и даты до 1970 года. Полученное число дней умножается на 86 400, после чего прибавляются часы, минуты и секунды — так получается количество секунд от 1970-01-01 00:00:00 в местном времени. В конце из результата вычитается сдвиг UTC (в часах × 3600), чтобы привести значение к UTC.
$$\begin{gathered} t = 86400 \cdot D + 3600\,\text{Hour} + 60\,\text{Minute} + \text{Second} - 3600\,\text{UTC Offset} \\[1.5em] \text{where}\quad \left\{ \begin{aligned} D &= \text{days from } 1970\text{-}01\text{-}01 \text{ to the chosen date} \\ \text{date} &= \left(\text{Year},\ \text{Month},\ \text{Day}\right) \end{aligned} \right. \end{gathered}$$
Разбор примера
Возьмём 2025-06-15 00:00:00 при сдвиге +9: daysSinceEpoch = 20254, значит localSeconds = \(20254 \times 86400 = 1\,749\,945\,600\). Вычитаем \(9 \times 3600 = 32\,400\) и получаем UNIX-время 1 749 913 200, что соответствует 2025-06-14 15:00:00 UTC.
$$t = 20254 \times 86400 - 9 \times 3600 = 1\,749\,913\,200$$
Частые вопросы
Почему timestamp меньше, чем я ожидаю, при положительном сдвиге? Потому что местное время, опережающее UTC, соответствует более раннему моменту по UTC. Поэтому его значение UNIX-времени получается меньше, чем у тех же показаний часов, прочитанных как UTC.
Работает ли это с датами до 1970 года? Да — результат просто будет отрицательным. Так, 1969-12-31 23:59:59 UTC равно \(-1\).
Учитываются ли високосные секунды? Нет. Калькулятор следует стандартному определению POSIX, по которому каждые сутки длятся ровно 86 400 секунд.