Открыть сервис

Timestamp: время и метки времени

Timestamp (от англ. time — время и stamp — штамп, отметка; также метка времени, временная метка) — последовательность символов или закодированная информация, обозначающая определённое время события. В вычислительной технике timestamp — это числовое значение, фиксирующее момент в абсолютном времени, обычно как количество единиц времени, прошедших от некоторой начальной точки отсчёта (эпохи). Метки времени широко применяются для записи порядка событий, сравнения данных, ведения журналов и обеспечения целостности информации.

Форматы и представление

Существует два основных способа представления меток времени: человекочитаемый и машинный.

Unix-время

Наиболее распространённым машинным форматом является Unix-время (Unix timestamp) — количество секунд, прошедших с 1 января 1970 года 00:00:00 UTC (эпоха Unix). Это значение хранится в виде целого числа. До 2038 года оно помещается в 32-битное знаковое целое, однако после наступления проблемы 2038 года (когда счётчик переполнится) требуется переход на 64-битные системы, что в современных компьютерах уже реализовано. Unix-время не зависит от часового пояса, так как всегда отсчитывается от UTC.

ISO 8601

Стандарт ISO 8601 описывает текстовый формат даты и времени, например 2025-01-15T14:30:00+03:00. Такой формат удобен для чтения человеком, однозначен и включает сдвиг относительно UTC. Он широко используется в обмене данными (JSON, XML), в веб-протоколах и базах данных.

Другие форматы

  • Windows FILETIME — количество 100-наносекундных интервалов с 1 января 1601 года.
  • NTP timestamp — 64-битное число, используемое в протоколе сетевого времени, отсчитывается от 1900 года.
  • Excel serial date — количество дней от 1 января 1900 года (с известными особенностями високосности).
  • Сетевые протоколы часто используют строки вида HTTP-date (например, Wed, 15 Jan 2025 14:30:00 GMT), описанные в RFC 7231.

Применение

Информационные системы и базы данных

В реляционных базах данных (PostgreSQL, MySQL, Oracle) поля типа TIMESTAMP или DATETIME хранят момент времени для каждой записи. Это позволяет отслеживать создание и изменение строк, проводить аудит, строить выборки по временным диапазонам. Часто используется автоматическая установка текущего времени при вставке (DEFAULT CURRENT_TIMESTAMP).

Логирование и мониторинг

Системные журналы (логи) операционных систем, серверов приложений и сетевых устройств сопровождают каждое событие меткой времени. Это необходимо для диагностики сбоев, анализа последовательности действий и расследования инцидентов. Формат логов часто определяется стандартом Syslog (RFC 5424), где время указывается в ISO 8601.

Криптография и защита информации

Метки времени применяются для защиты от повторного воспроизведения (replay attack) в протоколах аутентификации, для проверки срока действия сертификатов (X.509), а также в службах доверенного времени (TSP — Time Stamp Protocol, RFC 3161). Служба штампов времени заверяет, что документ существовал в определённый момент, что используется в электронном документообороте и юридически значимых операциях.

Синхронизация времени

Протокол NTP (Network Time Protocol) обеспечивает синхронизацию часов компьютеров через сеть. Каждый пакет NTP содержит метки времени отправки и получения, на основе которых вычисляется задержка и смещение. Точная синхронизация критична для распределённых систем, финансовых транзакций и телекоммуникаций.

Версионирование и кэширование

В системах контроля версий (Git, SVN) метки времени фиксируют момент коммита. В веб-разработке HTTP-заголовки Last-Modified и If-Modified-Since используют время для управления кэшированием, позволяя браузеру не загружать неизменённые ресурсы повторно.

Проблемы и особенности

Часовые пояса и летнее время

Хранение времени в UTC позволяет избежать путаницы с часовыми поясами, однако при отображении пользователю требуется перевод в локальное время. Перевод часов на летнее время создаёт неоднозначности (повторение одного часа осенью), поэтому для хранения всегда рекомендуется UTC, а для отображения — локальные правила.

Точность и монотонность

Обычные системные часы могут быть скорректированы (например, через NTP), что приводит к скачкам времени назад. Для измерения интервалов (профилирование, таймауты) следует использовать монотонные часы (monotonic clock), которые не подвержены корректировкам. Разделение понятий «стенное время» (wall clock) и «монотонное время» реализовано в большинстве языков программирования (например, time.Now() и time.Monotonic в Go).

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

32-битное представление Unix-времени переполнится 19 января 2038 года в 03:14:07 UTC. Это может привести к сбоям в старых системах, аналогично «Проблеме 2000 года». Современные ОС и приложения используют 64-битные целые, что отодвигает предел на миллиарды лет вперёд.

Генерация и преобразование

В языках программирования существуют стандартные функции для получения текущей метки времени: time() в PHP, Date.now() в JavaScript, time.time() в Python, System.currentTimeMillis() в Java. Для обратного преобразования числа в дату используются встроенные методы или библиотеки (например, datetime.fromtimestamp в Python, date() в PHP). Многие онлайн-сервисы и утилиты командной строки (date +%s в Linux) позволяют конвертировать Unix-время в человекочитаемый формат и обратно.

См. также

  • Эпоха (информатика)
  • Всемирное координированное время (UTC)
  • Сетевое время (NTP)
  • Формат даты ISO 8601
Загружаем BFOmetr…