Конвертер временных меток
Взаимное преобразование Unix timestamp и формата даты/времени
Timestamp в дату
Дату в timestamp
Сравнение часовых поясов
Примеры форматов
Что такое timestamp?
Timestamp (временная метка) — это числовое значение, представляющее определённый момент времени. Unix timestamp — это количество секунд, прошедших с 1970-01-01 00:00:00 UTC (эпохи Unix) до указанного времени. Это стандартный способ представления времени в компьютерных системах, независимый от платформы и часового пояса. Timestamp бывает секундный (10 цифр) и миллисекундный (13 цифр). Секундный timestamp часто используется в Unix/Linux системах, миллисекундный — в JavaScript и других языках программирования. В timestamp сначала нужно понять, значение дано в секундах, миллисекундах или как локальное время в читаемом формате. Unix-метки времени описывают моменты, независимые от часового пояса, но отображение даты зависит от часового пояса и правил перехода на летнее/зимнее время. Инструмент полезен для отладки журналов, API, баз данных, истечения срока действия кэша и запланированных событий. В пользовательских сообщениях часовой пояс лучше показывать явно.
Как пользоваться
Timestamp в дату
- Введите Unix timestamp в левой карточке
- Выберите целевой часовой пояс (например, Пекин UTC+8)
- Нажмите кнопку конвертации, чтобы увидеть результат
- Результаты включают: стандартный формат, ISO 8601, китайский формат и другие
Дата в timestamp
- Выберите дату и время в правой карточке
- Выберите исходный часовой пояс для этой даты и времени
- Нажмите кнопку конвертации, чтобы получить Unix timestamp
- Результаты включают timestamp в секундах и миллисекундах
Подсказки по часовым поясам
- Проверьте, в секундах или миллисекундах указано значение; путаница 10-значных и 13-значных timestamp — частая причина неверных дат.
- Всегда уточняйте целевой часовой пояс при конвертации человекочитаемых дат, особенно для логов, запланированных задач и межрегиональных систем.
Применение
Технический принцип
Unix timestamp отсчитывает прошедшее время от Unix Epoch, определённой как 1970-01-01T00:00:00Z, — это нулевая точка, которую POSIX-время использует для маркировки каждого последующего момента. POSIX-время намеренно игнорирует високосные секунды: каждый календарный день рассматривается как ровно 86 400 секунд, поэтому два timestamp, охватывающих момент вставки високосной секунды, будут отличаться на одну секунду от строгого подсчёта по атомным часам, но компенсацией является то, что конвертация между секундами эпохи и календарными полями UTC остаётся простым делением с остатком на 86 400. Двумя наиболее распространёнными форматами являются секунды (10 цифр на сегодняшний день, например 1717000000) и миллисекунды (13 цифр, например 1717000000000). Метод Date.now() в JavaScript возвращает миллисекунды с начала эпохи, а `new Date(ms)` ожидает миллисекунды, тогда как Unix `date +%s`, Go time.Unix и большинство столбцов TIMESTAMP в базах данных используют секунды. Определение по длине является стандартным способом различения: 10-значное значение соответствует диапазону 2001–2286 при чтении как секунды, а то же значение в миллисекундах попадало бы в 1970 год. Отображение timestamp требует указания часового пояса. UTC записывается с суффиксом `Z`; другие смещения используют формат `±HH:MM` (например, `+08:00` для китайского стандартного времени, `-05:00` для восточного стандартного времени США). ISO 8601 допускает несколько необязательных разделителей, тогда как RFC 3339 является более строгим профилем, фиксирующим их, поэтому спецификации API обычно требуют RFC 3339 с явным смещением. Устаревшие системы, хранящие секунды эпохи в 32-битном знаковом целом, переполняются при максимальном положительном значении 2147483647, что соответствует 2038-01-19T03:14:07Z (проблема Y2038); 64-битное хранение отодвигает эту границу далеко за пределы практической значимости.
- Unix Epoch зафиксирована на 1970-01-01T00:00:00Z, а POSIX-время игнорирует високосные секунды, поэтому каждый день рассматривается как ровно 86 400 секунд.
- JavaScript Date.now() возвращает миллисекунды; `Math.floor(Date.now() / 1000)` конвертирует в timestamp с точностью до секунд.
- Граница Y2038: знаковый 32-битный timestamp переполняется при значении 2147483647 = 2038-01-19T03:14:07Z; 64-битное хранение решает эту проблему.
- ISO 8601 и RFC 3339: RFC 3339 — более строгий профиль ISO 8601, требующий явного смещения (`Z` или `±HH:MM`), и рекомендуется для API и логов.
- ECMAScript Date ограничена диапазоном ±100 000 000 дней от эпохи (≈ ±273 785 лет), поэтому `new Date(8.64e15)` и `new Date(-8.64e15)` являются абсолютными границами.
- JWT claims `exp`, `iat` и `nbf`, `Cache-Control: max-age` и Cookie `Expires` используют Unix-секунды (RFC 7519, RFC 7234), поэтому их можно напрямую складывать/вычитать с `Math.floor(Date.now()/1000)`.
- Часовой пояс влияет на отображаемую дату и время, но не на значение timestamp; одна и та же секунда эпохи отображается как разное настенное время в UTC+8 и UTC-5.
Примеры
Преобразование 10-значной Unix-метки в читаемую дату
Вход: 1781526600
UTC: 2026-06-15 12:30:00
Пекин (UTC+8): 2026-06-15 20:30:00
ISO 8601: 2026-06-15T12:30:00Z
POSIX: IEEE 1003.1 определяет Unix time как секунды с 1970-01-01 00:00:00 UTC (Epoch)
ISO: ISO 8601 задаёт формат YYYY-MM-DDThh:mm:ssZ для однозначного представления даты-времениОбратное преобразование даты в timestamp
Вход: 2026-01-01 00:00:00 (UTC)
Секунды (10 цифр): 1767225600
Миллисекунды (13 цифр): 1767225600000
Команда Unix: date -d @1767225600
Примечание: JavaScript Date.getTime() возвращает миллисекунды; Python time.time() возвращает секунды (float)
POSIX: тип time_t традиционно представляет собой 32- или 64-битное знаковое целоеКак отличить секунды от миллисекунд
1781526600 -> 10 цифр, секунды -> 2026-06-15 12:30:00 UTC
1781526600000 -> 13 цифр, миллисекунды -> 2026-06-15 12:30:00.000 UTC
Частая ошибка: 13-значное значение, прочитанное как секунды, даст ~74 000 год
Быстрая проверка: 10-11 цифр = секунды (1970-2286), 13 цифр = миллисекунды (по умолчанию в JavaScript)Декодирование поля exp у JWT
Полезная нагрузка JWT: { "exp": 1798617600 }
Декодировано: 2027-01-01 00:00:00 UTC
Текущее время: 1781526600
Действителен: 17 091 000 секунд (осталось ~198 дней)
RFC: раздел 2 RFC 7519 определяет NumericDate как секунды с EpochПроверка границы Y2038
Максимальная знаковая 32-битная метка: 2147483647
Декодировано: 2038-01-19 03:14:07 UTC
На секунду позже: 2147483648 -> переполнение на устаревших 32-битных системах
Решение: использовать 64-битный time_t (по умолчанию в современных Linux/macOS) или хранить как строку ISO 8601
POSIX: системы с 32-битным time_t переполнятся после 2038-01-19Часто задаваемые вопросы
Что такое Unix-метка времени?
Количество секунд, прошедших с 1970-01-01 00:00:00 UTC — «эпохи Unix». JavaScript и многие API используют миллисекунды от той же эпохи (Unix-метка × 1000). Страница принимает оба варианта и показывает соответствующую дату в вашем местном времени и UTC.
Секунды, миллисекунды, микросекунды или наносекунды?
Разные системы используют разную точность. Unix `time()` возвращает секунды. JavaScript Date.now() — миллисекунды. Java Instant поддерживает наносекунды. Страница автоматически определяет тип по числу цифр: 10 цифр = секунды (для 2001–2286), 13 = миллисекунды, 16 = микросекунды, 19 = наносекунды.
Почему 19 января 2038 года так важно?
Это «проблема 2038 года»: 32-битные знаковые Unix-метки переполнятся в 03:14:07 UTC 19 января 2038 года. Системы, всё ещё использующие 32-битный time_t, откатятся к 1901 году. Современные 64-битные системы не пострадают ещё миллиарды лет, но устаревшие встраиваемые системы требуют исправления.
Как обрабатываются часовые пояса?
Unix-метки по своей природе в UTC. Страница показывает ваше местное время, UTC и позволяет выбрать любую IANA-зону (Asia/Shanghai, America/New_York, Europe/London) для дополнительного отображения. Переход на летнее время применяется автоматически по каждой зоне.
Почему разбор «YYYY-MM-DD» местами считается UTC?
Даты ISO 8601 без часового пояса неоднозначны. Конструктор Date в JavaScript трактует строки только с датой как UTC, а строки с датой и временем — как локальные. Это печально известный источник ошибок «сдвига на день». Страница явно указывает, какой часовой пояс применяется.
Конвертация выполняется локально?
Да. Используются JavaScript Date и Intl.DateTimeFormat. Никакие метки времени не загружаются на сервер.
Можно ли сгенерировать метку для будущей даты?
Да. Выберите будущую дату — и страница вернёт соответствующую метку. Удобно для установки claim exp в JWT, тестовых дат cron-задач или окон истечения кеша в коде.