← Все инструменты

Конвертер Unix-времени

Мгновенно конвертируйте Unix-время в даты и обратно прямо в браузере. Что такое epoch time, секунды и миллисекунды, подводные камни UTC и проблема 2038 года.

Unix-временные метки без головной боли

Спросите троих разработчиков, который сейчас час, — и, в зависимости от того, в каком часовом поясе они находятся, получите три разных ответа. Спросите Unix-временную метку — и получите ровно одно число, одинаковое для всех на планете. Именно этот единственный целочисленный показатель незаметно лежит в основе практически каждого лог-файла, строки в базе данных и ответа API, с которыми вы когда-либо работали. Эта страница объясняет, что означает данное число, как его читать в обоих направлениях и где оно чаще всего подводит.

Светящиеся часы, растворяющиеся в потоке световых цифр, олицетворяющих Unix epoch time
Epoch time — это единый счётчик, тикающий вперёд с 1970 года.

Что такое Unix-время

Unix-временная метка — это количество секунд, прошедших с 00:00:00 UTC 1 января 1970 года, без учёта високосных секунд. Этот момент называется эпохой, и его выбрали ранние разработчики Unix просто потому, что это была удобная круглая дата для отсчёта. В момент эпохи значение равно ровно 0. С каждой последующей секундой число прибавляется на единицу, поэтому оно только растёт. Даты до 1970 года тоже вполне допустимы — они выражаются отрицательными целыми числами.

Вы также встретите это понятие под названием POSIX-время или, в широком смысле, epoch time. Как бы оно ни называлось, механика одна: непрерывно возрастающий счётчик секунд. Поскольку это обычное целое число, а не форматированная строка, компьютер может хранить его в нескольких байтах и сравнивать два значения единственным вычитанием.

Секунды, миллисекунды и их разновидности

Классическое Unix-время считает целые секунды, давая знакомое десятизначное число, которое мы видим сегодня. Но многим средам нужна более высокая точность. JavaScript, например, работает в миллисекундах, выдавая тринадцатизначное значение, а некоторые системы идут ещё дальше — до микросекунд или наносекунд. Надёжное практическое правило: десятизначное число — это секунды, тринадцатизначное — миллисекунды. Если после преобразования вы видите дату около 1970 года, хотя ожидали текущее время, скорее всего вы подали миллисекунды в поле для секунд или наоборот. Наш конвертер автоматически определяет порядок величин, так что угадывать почти никогда не приходится.

Почему разработчики им доверяют

Главное преимущество — временная метка не привязана к часовому поясу. Целое число 1735689600 указывает на один и тот же момент в Токио, Берлине и Сан-Паулу. Хранение этого числа вместо отформатированной локальной строки означает, что никогда не нужно задаваться вопросом, к каким часам относится значение. Сортировка тоже тривиальна: хронологический порядок — это просто числовой порядок, поэтому индекс базы данных по столбцу с временной меткой сортирует события правильно без всякого разбора строк. Арифметика столь же проста: разница между двумя событиями — одно вычитание, а добавить день — значит добавить 86400. Именно эти свойства объясняют, почему логи, токены, кэши и очереди сообщений повсеместно используют epoch time.

Конвертация в обе стороны

Перевод временной метки в человекочитаемую дату означает преобразование счётчика секунд в календарную форму с нужным часовым поясом. Обратный путь — берёте год, месяц, день и время, определяете часовой пояс и сворачиваете всё обратно в секунды от эпохи. Наш инструмент делает оба направления мгновенно и полностью в браузере, поэтому ничто из того, что вы вставляете, не покидает устройство. Вставьте число — и получите дату; выберите дату — и получите число в UTC и по местному времени одновременно.

Светящаяся временная лента с маркером, скользящим вдоль потока epoch-секунд
Один маркер на одной временной шкале, читаемый как UTC и как местное время.

UTC против местного времени: классическая ловушка

Сама временная метка не имеет часового пояса; она всегда привязана к UTC. Путаница возникает только при отображении. Если вы преобразуете 1700000000 и на вашем экране показывается вечерний час, а коллега в другой стране видит дневной — всё в порядке: вы оба смотрите на один и тот же момент, отображённый по разным местным часам. Ошибки закрадываются, когда код читает локальную дату как UTC или ставит временную метку по настенным часам без записи смещения. Правильная привычка — хранить и передавать UTC и применять локальное смещение в самый последний момент, когда значение показывается пользователю. Если сомневаетесь, сравнивайте со строкой UTC в конвертере, а не с местным временем.

Проблема 2038 года

Многие старые системы хранили Unix-время в знаковом 32-битном целом числе. Это поле исчерпывается через одну секунду после 03:14:07 UTC 19 января 2038 года, когда счётчик переполняется и обнуляется до отрицательного числа, потенциально откидывая даты обратно в 1901 год. Это та же семья проблем, что и Y2K. Хорошая новость: современные операционные системы и языки в основном перешли на 64-битные временные метки, которые не переполнятся ещё примерно 292 миллиарда лет, так что для нового кода это скорее интересный исторический факт, чем реальная угроза.

Другие браузерные помощники найдёте в разделе инструментов разработчика, а если нужно поработать с числами напрямую, калькуляторы — в одном клике.

Часто задаваемые вопросы

Что такое Unix-временная метка?

Это количество секунд с 00:00:00 UTC 1 января 1970 года без учёта високосных секунд. Этот начальный момент называется эпохой, и счётчик только возрастает с течением времени.

Почему моё число преобразуется в дату около 1970 года?

Скорее всего, вы перепутали секунды и миллисекунды. Десятизначное число — это секунды, тринадцатизначное — миллисекунды. Если подать миллисекунды в поле для секунд, видимое время уменьшится примерно в тысячу раз и окажется вблизи эпохи.

Unix-временная метка привязана к часовому поясу?

Нет. Значение всегда привязано к UTC. Часовой пояс вступает в игру только при отображении временной метки в виде читаемой даты — поэтому одно и то же число может показывать разное время для разных людей.

Как преобразовать дату обратно в временную метку?

Укажите год, месяц, день и время, определите часовой пояс, в котором выражена эта дата, — и инструмент свернёт всё это в секунды от эпохи. Оба направления доступны на этой странице прямо в браузере.

Что такое проблема 2038 года?

Системы, хранящие Unix-время в знаковом 32-битном целом числе, переполняются через секунду после 03:14:07 UTC 19 января 2038 года. Современные 64-битные временные метки решают эту проблему на миллиарды лет, поэтому большинство актуального программного обеспечения не затронуто.

Мои данные отправляются на сервер?

Нет. Конвертация происходит полностью в браузере, поэтому любая временная метка или дата, которую вы вставляете, остаётся на вашем устройстве.