Конвертер Unix timestamp в дату
Преобразуйте Unix timestamp в читабельные дату и время — или любую дату обратно в Unix timestamp. Поддерживает секунды и миллисекунды.
Поделиться инструментом
Встроить на сайт
Похожие инструменты
Что такое Unix timestamp?
Unix timestamp, также называемый Unix time или POSIX time — это количество секунд, прошедших с момента 1970-01-01 00:00:00 UTC, известного как Unix epoch. Это широко используемый стандарт в вычислениях, поскольку он представляет точку во времени одним целым числом, что упрощает хранение, сравнение и арифметические операции.
JavaScript работает внутри с миллисекундами, поэтому Date.now() возвращает Unix timestamp, умноженный на 1000. Многие API, базы данных и серверные системы используют вместо этого секунды. Этот инструмент принимает оба формата и автоматически определяет секунды или миллисекунды на основе введённого числа.
Известные Unix timestamps
| Timestamp | Дата (UTC) | Примечание |
|---|---|---|
0 | 1970-01-01 00:00:00 | Unix epoch |
1,000,000,000 | 2001-09-09 01:46:40 | 1 миллиард секунд |
2,000,000,000 | 2033-05-18 03:33:20 | 2 миллиарда секунд |
2,147,483,647 | 2038-01-19 03:14:07 | Проблема 2038 года (максимум для 32-бит) |
Почему 1970?
Unix epoch 1 января 1970 года был выбран отчасти по соглашению, отчасти из практических соображений. Unix разрабатывался в конце 1960-х и начале 1970-х годов в Bell Labs. Разработчикам нужна была недавняя, «круглая» дата для начала временной шкалы. 1 января 1970 года была достаточно близко к тому времени, чтобы быть практичной, и не имела никакого особого технического значения — это была просто удобная точка отсчёта.
Альтернативные даты epoch существуют в других системах: Windows FILETIME начинается 1 января 1601 года; GPS time начался 6 января 1980 года; NTP epoch — 1 января 1900 года. При преобразовании между системами знание epoch каждой из них необходимо.
Секунды vs миллисекунды
Исходный Unix timestamp измеряется в секундах. Большинство серверных языков и систем (Unix shell, Python's time.time(), PHP's time(), большинство баз данных) используют секунды. JavaScript's Date.now() и new Date().getTime() возвращают миллисекунды. Это несоответствие — частая причина ошибок, когда JavaScript-фронтенды взаимодействуют с backend API.
Unix timestamp в секундах — это сейчас 10-значное число (около 1 700 000 000 по состоянию на 2023 год). Timestamp в миллисекундах — это 13-значное число. Калькулятор определяет, какой формат вы ввели, по количеству цифр и преобразует его соответственно.
Проблема 2038 года
Системы, которые хранят Unix timestamp как знаковое 32-битное целое число, могут представлять только даты до 2,147,483,647 секунд после epoch — это 03:14:07 UTC 19 января 2038 года. После этого момента знаковое 32-битное целое число переполняется в большое отрицательное число, представляя дату в 1901 году.
Это иногда называют «Y2K38» или Unix Millennium Bug. Современные 64-битные системы не подвержены этой проблеме, так как знаковое 64-битное целое число может представлять timestamp примерно на 292 миллиарда лет. Однако встроенные системы, устаревшие базы данных и старое 32-битное программное обеспечение могут быть всё ещё уязвимы. Многие отрасли — включая телекоммуникации, банковское дело и системы промышленного управления — проводят постоянные работы по миграции для решения этой проблемы.
Как получить текущий Unix timestamp
| Язык / окружение | Команда |
|---|---|
| JavaScript | Math.floor(Date.now() / 1000) |
| Python | import time; int(time.time()) |
| PHP | time() |
| Bash | date +%s |
| SQL (PostgreSQL) | EXTRACT(EPOCH FROM NOW())::int |
| SQL (MySQL) | UNIX_TIMESTAMP() |
| Go | time.Now().Unix() |
| Rust | SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs() |
Практическое применение
Разработка API: REST API обычно используют Unix timestamp для полей created_at, updated_at и истечения токенов. Timestamp не зависит от часового пояса и однозначен — в отличие от отформатированных строк даты, которые зависят от локали и соглашений форматирования.
Истечение токенов: JWT (JSON Web Tokens) используют Unix timestamp для claims exp (истечение) и iat (время выдачи). Токен истекает, когда текущий timestamp превышает значение exp. Вычисление времени истечения — «этот токен должен истечь через 24 часа» — требует добавления 86 400 секунд к текущему timestamp.
Cache TTL: Истечение кэша часто задаётся как Unix timestamp или как количество секунд от текущего момента. Отладка проблем кэша часто требует преобразования сохранённого timestamp истечения в понятный для человека формат даты.
Анализ логов: Серверные логи часто содержат Unix timestamp. Преобразование их в читаемые даты — первый шаг в сопоставлении записей логов с реальными событиями.
Хранение в базе данных: Хранение timestamp в виде целых чисел, а не отформатированных строк, избегает ошибок преобразования часовых поясов и упрощает сортировку, запросы по диапазону и арифметику. Запрос «все записи за последние 7 дней» превращается в WHERE created_at > (NOW_UNIX - 604800).
