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