Конвертер времени: Unix, ISO 8601, Java ISO_DATE_TIME
Перевод Unix-времени и дат в ISO 8601, RFC 3339, константы Java DateTimeFormatter, HTTP-даты и обратно, часовые пояса и свой шаблон.
Данные обрабатываются в браузере и никуда не отправляются
Ввод
Результат
Здесь появится результат
Введите данные слева - результат появится сразу
Как пользоваться
Введите время в любом виде - результат появляется сразу: Unix-число (секунды, миллисекунды, микро- или наносекунды определяются по величине), дату ISO 8601 (2024-01-31T13:00:00+03:00), SQL-запись (2024-01-31 13:00:00), русскую запись (31.01.2024 13:00), HTTP-дату (Wed, 31 Jan 2024 10:00:00 GMT) или слово now. Ниже появятся все форматы сразу: Unix, ISO 8601, константы Java DateTimeFormatter (ISO_DATE_TIME, ISO_OFFSET_DATE_TIME, ISO_INSTANT и остальные), RFC 3339, RFC 2822, HTTP-дата, SQL, Excel, FILETIME - у каждого есть кнопка копирования.
Укажите часовой пояс (UTC, Europe/Moscow, смещение +03:00 или local): в нём читается время без смещения и в нём выводятся все форматы. В блоке «В других часовых поясах» то же мгновение показано в нескольких поясах сразу. Можно задать свой шаблон: в стиле Java (yyyy-MM-dd'T'HH:mm:ss.SSSXXX), он же подходит для .NET, или strftime (%Y-%m-%d %H:%M:%S). Внизу - готовые строки кода для JavaScript, Python, Java, C#, PHP, Go, PostgreSQL и MySQL.
Частые ошибки
Вот что чаще всего путают со временем в интеграциях:
Секунды или миллисекунды
Unix-время в секундах (1706695200) и в миллисекундах (1706695200000) отличается на три нуля. JavaScript и Java отдают миллисекунды, PHP, Python и JWT - секунды. Ошибка превращает дату в 1970 год или в далёкое будущее. Инструмент определяет единицы по величине числа и сообщает об этом.
Время без часового пояса
2024-01-31T13:00:00 без Z и смещения не определяет момент: в Москве и Лондоне это разные мгновения. Передавайте время с Z или смещением, а если пояса нет, договоритесь, в каком поясе его читать.
Z, +00:00 и GMT - почти одно и то же
Z (Zulu) и +00:00 означают UTC. GMT в HTTP-заголовках - тоже UTC. Но «Europe/London» летом - не UTC, а +01:00. Название пояса, а не смещение, нужно, чтобы учесть переход на летнее время.
Переход на летнее и зимнее время
В день перевода часов некоторое местное время не существует (час «пропадает» весной), а некоторое бывает дважды (осенью). Поэтому для хранения и обмена используют UTC, а местное время считают только при показе.
Ключевые слова ISO_DATE_TIME в Java
ISO_INSTANT всегда печатает UTC с буквой Z, ISO_OFFSET_DATE_TIME - со смещением, ISO_ZONED_DATE_TIME и ISO_DATE_TIME добавляют название пояса в квадратных скобках, а ISO_LOCAL_DATE_TIME не содержит пояса вовсе. Выберите ту, что понимает принимающая сторона.
Доли секунды
Java печатает доли секунды без хвостовых нулей (ISO_LOCAL_TIME) или группами по три цифры (Instant), JavaScript всегда три цифры, а базы данных хранят микросекунды. Разное количество знаков - частая причина несовпадения подписей и строковых сравнений.
Год 2038 и 32-битное время
Unix-время в 32-битном знаковом целом переполнится 19 января 2038 года. В новых системах время хранят в 64 битах, но старые базы, встроенные устройства и протоколы с 32-битными полями этой проблемы ещё не избежали.
Частые вопросы
Отправляются ли мои данные на сервер?
Нет - 100%. Сайт целиком статический, у него нет серверной части. Все вычисления выполняются в вашем браузере, а часовые пояса берутся из его встроенной базы.
Что такое Unix-время и от какой даты оно считается?
Это количество секунд, прошедших с 1 января 1970 года 00:00:00 UTC (эпоха Unix). Високосные секунды не учитываются. Такое число одинаково во всех часовых поясах, поэтому его удобно хранить и передавать.
Как отличить секунды от миллисекунд?
По количеству цифр: 10 цифр - секунды (до 2286 года), 13 - миллисекунды, 16 - микросекунды, 19 - наносекунды. Инструмент выбирает единицы автоматически, а при необходимости можно указать их вручную.
Чем отличается ISO 8601 от RFC 3339?
RFC 3339 - строгий профиль ISO 8601 для интернета: обязательны дата и время, обязательно смещение или Z, разделитель T. Всё, что соответствует RFC 3339, является корректным ISO 8601, но не наоборот (например, недельные даты в RFC 3339 не допускаются).
Какую константу Java выбрать: ISO_DATE_TIME, ISO_OFFSET_DATE_TIME или ISO_INSTANT?
Для обмена между системами обычно подходят ISO_OFFSET_DATE_TIME (со смещением) или ISO_INSTANT (всегда UTC с Z). ISO_DATE_TIME и ISO_ZONED_DATE_TIME добавляют название пояса в скобках - так не всякий парсер читает. ISO_LOCAL_DATE_TIME без пояса годится только если пояс известен из контекста.
Что значит «Европа/Москва» и почему не просто +03:00?
Название пояса (IANA, например Europe/Moscow) содержит историю и правила перехода на летнее время, а смещение +03:00 - лишь значение в один момент. Для прошедших и будущих дат нужно название пояса, иначе при переводе часов время «поедет».
Что делает шаблон yyyy-MM-dd'T'HH:mm:ss.SSSXXX?
Это формат Java DateTimeFormatter: yyyy - год, MM - месяц, dd - день, HH - часы 0-23, mm - минуты, ss - секунды, SSS - миллисекунды, XXX - смещение вида +03:00, а текст в одинарных кавычках выводится как есть. Подобные шаблоны есть в .NET; в Python и C используют %-коды (strftime).
Как узнать время в другом часовом поясе?
Укажите нужные пояса в поле «Показать ещё в поясах» через запятую - в блоке «В других часовых поясах» то же мгновение появится в каждом. Сам пояс ввода указывается в поле «Часовой пояс».
Можно ли ввести несколько значений сразу?
Нет, инструмент рассчитан на одно значение, но результат пересчитывается сразу при вводе, поэтому удобно менять число или дату и сразу видеть все форматы. Чтобы вернуться к текущему моменту, нажмите «Сейчас».
Похожие инструменты
Курс «Проектирование API и интеграций»
Глубокое погружение в REST, gRPC, SOAP, проектирование баз данных и брокеры сообщений (Kafka, RabbitMQ). Делегирование рутины нейросетям (ИИ). Перестанете бояться технических собеседований и начнете говорить с разработчиками на одном языке. Курс собран так, чтобы пробить зарплатный потолок и вырасти в грейде - ученики тому подтверждение.
Перейти к курсу на Stepik