Что такое Unix-метка времени? Полное объяснение epoch-времени
Быстрый ответ
Unix timestamp — количество секунд с 1 января 1970, 00:00:00 UTC (Unix epoch). Timezone-independent и легко сравним. JavaScript использует миллисекунды (13 цифр); Unix и большинство API — секунды (10 цифр). Используйте наш бесплатный Timestamp Converter.
Введение
Unix timestamp (также Unix epoch time, POSIX time или Unix time) — количество секунд с 1 января 1970, 00:00:00 UTC —момент, известный как Unix epoch. Timestamps широко используются в ОС, базах данных, логах и API, так как timezone-independent (всегда UTC), легко сравнимы и компактны. Однако не человеко-читаемы —1693526400 бессмысленно без конвертации.
Шаг за шагом
-
Поймите эпоху Unix
Эпоха Unix — 1 января 1970 года, 00:00:00 по всемирному координированному времени (UTC). Временная метка Unix — это количество секунд с этого момента. Положительные временные метки находятся после эпохи; перед ним стоят отрицательные метки времени (поддерживаются некоторыми системами).
-
Отличать секунды от миллисекунд
Временные метки Unix обычно выражаются в секундах (10 цифр по состоянию на 2026 год, например 1693526400). Date.now() и Date.getTime() JavaScript возвращают миллисекунды (13 цифр, например, 1693526400000). Всегда проверяйте, какую единицу измерения ожидает API — их смешивание является наиболее распространенной ошибкой временных меток.
-
Понимание независимости часового пояса
Временные метки Unix всегда указаны в формате UTC. Они не зависят от часового пояса пользователя. Чтобы отобразить временную метку в определенном часовом поясе, преобразуйте ее в дату и примените смещение часового пояса. Это делает временные метки идеальными для хранения и сравнения.
-
Узнайте о проблеме 2038 года
Системы, использующие 32-битные целые числа со знаком для меток времени, переполнятся 19 января 2038 года, 03:14:07 UTC — «проблема Y2038». Системы, использующие 64-битные целые числа или числа JavaScript (64-битные числа с плавающей запятой), не затрагиваются. Современные системы в значительной степени безопасны к 2038 году, но устаревшие встроенные системы могут и не быть таковыми.
Примеры
Временная метка известной даты
Вход: 2023-09-01 00:00:00 UTC
Выход: 1693526400 (секунды) или 1693526400000 (миллисекунды)
Эпоха Unix
Вход: 1970-01-01 00:00:00 UTC
Выход: 0
Граница проблемы Y2038
Вход: 2038-01-19 03:14:07 UTC
Выход: 2147483647 (максимум 32-битное целое число со знаком)
Распространенные проблемы
- Смешение секунд и миллисекунд. JavaScript использует миллисекунды (Date.now()), Unix и большинство APIs используют секунды. Разделите на 1000, чтобы преобразовать мс в секунды; умножьте на 1000 в обратном порядке.
- Путаница с часовыми поясами — временные метки указаны в формате UTC. При отображении конвертируйте в местный часовой пояс пользователя или указывайте UTC. Не применяйте смещения к необработанной метке времени.
- Проблема 2038 года — переполнение меток времени 32-битного знакового целого числа 19 января 2038 года. Чтобы избежать этого, используйте 64-битные целые числа или числа JavaScript.
- Отрицательные временные метки — даты до 1 января 1970 г. имеют отрицательные временные метки. Некоторые системы их не поддерживают.
Советы
- Всегда проверяйте, ожидает ли API секунды или миллисекунды — это наиболее распространенная ошибка временной метки.
- Используйте строки ISO 8601 (например, «2023-09-01T00:00:00Z») для удобочитаемых временных меток в APIs; используйте эпоху Unix для хранения и вычислений.
- JavaScript Date.now() возвращает миллисекунды; разделите на 1000 и пол, чтобы получить секунды.
- Используйте наш конвертер временных меток для преобразования временных меток в удобочитаемые даты в вашем браузере.