Как пользоваться конвертером Unix-времени
- Вставьте Unix timestamp. Конвертер сам определяет, указан он в секундах или в миллисекундах.
- Посмотрите дату в UTC, в вашем местном часовом поясе и в формате ISO 8601.
- Для обратного преобразования выберите дату и время и скопируйте полученный timestamp.
Преобразования выполняются в вашем браузере по часам и настройкам часового пояса вашего устройства; ничего не отправляется на сервер и не хранится там.
Что такое Unix timestamp?
Unix timestamp (также epoch time, Unix-время или время POSIX) — это количество секунд, прошедших с начала эпохи Unix: 1970-01-01T00:00:00Z, то есть с полуночи по UTC 1 января 1970 года. Даты до начала эпохи выражаются отрицательными числами.
Timestamp так популярен потому, что это одно целое число: оно не зависит от часовых поясов и перехода на летнее время, его легко сравнивать и сортировать, и оно занимает мало места. Перевод в местное время — вопрос отображения, который решается в самый последний момент.
1700000000 → 2023-11-14T22:13:20Z
0 → 1970-01-01T00:00:00Z
-86400 → 1969-12-31T00:00:00Z
Секунды или миллисекунды
Утилиты Unix, PHP, time.time() в Python и большинство баз данных используют секунды. Date.now() в JavaScript, System.currentTimeMillis() в Java и многие JSON API используют миллисекунды. Для современных дат значение в секундах состоит из 10 цифр, а в миллисекундах — из 13. Путаница между ними — самая распространённая ошибка с timestamp:
new Date(1700000000) // Tue Jan 20 1970 (воспринято как мс!)
new Date(1700000000 * 1000) // Tue Nov 14 2023
Високосные секунды не учитываются
Unix-время исходит из того, что в каждых сутках ровно 86 400 секунд. Когда в UTC добавляется високосная секунда, Unix-время её не считает, поэтому timestamp не равен истинному числу секунд СИ, прошедших с 1970 года. Почти для всех приложений это неважно, а арифметика с датами остаётся простой.
Частые ошибки
Проблема 2038 года
Системы, которые хранят timestamp как 32-битное целое со знаком, могут считать только до 2 147 483 647, то есть до 2038-01-19T03:14:07Z. Секундой позже значение переполняется и становится отрицательным числом, соответствующим дате в декабре 1901 года. Современные операционные системы и языки используют 64-битное время, но встроенные устройства, старые форматы файлов и столбцы баз данных, объявленные как 32-битные целые, по-прежнему в зоне риска. Для всего, что может хранить будущие даты, используйте 64-битные целые или встроенные типы даты/времени.
Незаметно подмешанное местное время
Разбор строки даты без часового пояса, например 2024-03-10 02:30, использует местный пояс компьютера и может давать разные значения timestamp на разных серверах или несуществующее время в момент перевода часов. Всегда указывайте смещение или Z.
ISO 8601
Для обмена в удобочитаемом виде стандартом служит ISO 8601 (и его интернет-профиль RFC 3339): 2023-11-14T22:13:20Z или 2023-11-14T23:13:20+01:00. Как и timestamp, строки ISO 8601 в UTC правильно сортируются как обычный текст.
Как получить текущий timestamp в коде
| Среда | Секунды с начала эпохи |
|---|---|
| Командная оболочка (Linux, macOS) | date +%s |
| Python | import time; int(time.time()) |
| JavaScript | Math.floor(Date.now() / 1000) |
| PHP | time() |
| MySQL | SELECT UNIX_TIMESTAMP(); |
| PostgreSQL | SELECT EXTRACT(EPOCH FROM now()); |
Чтобы перевести timestamp обратно в дату в командной строке, используйте date -u -d @1700000000 в Linux (GNU date) или date -u -r 1700000000 в macOS.
exp, iat и nbf хранятся как Unix timestamp в секундах. Декодер JWT преобразует их за вас. Для упорядоченных по времени идентификаторов со встроенным timestamp в миллисекундах воспользуйтесь генератором UUID v7.Часто задаваемые вопросы
Одинаков ли Unix timestamp во всех часовых поясах?
Да. Он отсчитывает секунды от фиксированного момента в UTC, поэтому в любой момент времени он везде одинаков. Отличается только его перевод в местное время.
Как отличить секунды от миллисекунд?
Посчитайте цифры. Для современных дат это 10 цифр в секундах и 13 в миллисекундах. «Дата» в январе 1970 года обычно означает, что значение в секундах прочитали как миллисекунды, а дата на десятки тысяч лет вперёд — об обратной ошибке.
Что произойдёт в 2038 году?
Сломается только программное обеспечение, которое хранит время в 32-битном целом со знаком. 64-битные значения timestamp не переполнятся ещё миллиарды лет.
Может ли Unix timestamp быть отрицательным?
Да. Отрицательные значения обозначают моменты до 1 января 1970 года, хотя некоторые старые системы и API их не принимают.
Обновлено
Комментарии
Войдите, чтобы оценить этот инструмент.
Поделитесь советом, задайте вопрос или расскажите, как вам помог инструмент.
Комментариев пока нет. Расскажите первым, как всё прошло.