Datetime: представление даты и времени¶
Datetime — в вычислительной технике и программировании — тип данных или формат представления, объединяющий календарную дату и время суток в едином значении. Используется для фиксации моментов времени, хронологической сортировки событий и выполнения арифметических операций с интервалами.
¶Определение и назначение
Термин datetime происходит от слияния английских слов date (дата) и time (время). В отличие от раздельного хранения даты и времени, комбинированный тип позволяет однозначно идентифицировать конкретный момент в пределах суток и календаря. Основное назначение — машинное представление момента времени, пригодное для сравнения, вычисления разниц и отображения в различных форматах.
В реляционных базах данных тип DATETIME (или TIMESTAMP) является стандартным для хранения операционных записей: времени создания заказа, отправки сообщения, изменения записи. В языках программирования соответствующие классы (например, datetime.datetime в Python, DateTime в C# и PHP) предоставляют методы для создания, парсинга и форматирования значений.
¶Составные части и точность
Значение datetime включает несколько компонентов:
- год (обычно от 1 до 9999);
- месяц (1–12);
- день (1–31, с учётом длины месяца и високосных лет);
- час (0–23 или 1–12 при использовании AM/PM);
- минута (0–59);
- секунда (0–59, иногда с долями);
- сдвиг относительно UTC (часовой пояс).
Точность хранения долей секунды зависит от реализации: в MySQL DATETIME по умолчанию хранит секунды, но поддерживает дробную часть до микросекунд (6 знаков); в PostgreSQL тип timestamp позволяет хранить точность до микросекунды; в языке Java класс LocalDateTime фиксирует наносекунды.
¶Отличия от смежных типов
Следует различать datetime и смежные понятия:
- Date — только календарная дата, без времени суток.
- Time — только время, без привязки к дате.
- Timestamp — в ряде СУБД (например, MySQL, PostgreSQL) — тип, аналогичный datetime, но с привязкой к часовому поясу и ограниченным диапазоном (в MySQL — с 1970 по 2038 год в версиях до 5.6). В PostgreSQL TIMESTAMP WITH TIME ZONE хранит момент времени в UTC.
- Unix time — целое число секунд, прошедших с 1 января 1970 года; не является календарным представлением, но легко конвертируется в datetime.
¶Хранение в базах данных
В SQL-стандарте определены типы DATE, TIME и TIMESTAMP. Реализации различаются:
| СУБД | Тип | Диапазон | Особенности |
|---|---|---|---|
| MySQL | DATETIME | 1000-01-01 — 9999-12-31 | Не зависит от часового пояса сервера |
| MySQL | TIMESTAMP | 1970-01-01 — 2038-01-19 | Автоматически конвертируется в UTC |
| PostgreSQL | TIMESTAMP | 4713 до н.э. — 294276 н.э. | Поддержка точности до микросекунд |
| SQL Server | DATETIME2 | 0001-01-01 — 9999-12-31 | Точность до 100 наносекунд |
| SQLite | TEXT/INTEGER | нет ограничений | Хранится как текст ISO 8601 или Unix-время |
При проектировании баз данных выбор между DATETIME и TIMESTAMP определяется необходимостью учёта часовых поясов: если приложение работает в одном регионе, достаточно DATETIME; для глобальных систем предпочтителен TIMESTAMP WITH TIME ZONE.
¶Форматы представления
Наиболее распространённый текстовый формат — ISO 8601: 2025-03-14T09:26:53+03:00. Буква T разделяет дату и время; сдвиг указывается относительно UTC. Такой формат однозначен, лексикографическая сортировка совпадает с хронологической, что удобно для индексации.
Локальные форматы различаются по странам: в России принят порядок «день.месяц.год» (14.03.2025 09:26), в США — «месяц/день/год» (03/14/2025 09:26 AM), в Японии — «год-месяц-день». Для интернационального обмена данными стандарт ISO 8601 является рекомендованным.
¶Работа с datetime в языках программирования
Современные языки предоставляют богатые библиотеки для работы с датой и временем:
- Python — модуль
datetime(классыdate,time,datetime,timedelta), а также сторонняя библиотекаpytzдля работы с часовыми поясами. - JavaScript — встроенный объект
Dateхранит время в миллисекундах с 1970 года; для сложных операций используется библиотекаdate-fnsилиLuxon. - Java — пакет
java.time(классыLocalDateTime,ZonedDateTime,Instant), появившийся в Java 8. - C# — структура
DateTimeв пространстве имёнSystem. - PHP — класс
DateTimeс методамиformat(),modify(),diff().
Типичные операции: получение текущего момента (now()), разбор строки (parse, strptime), форматирование вывода (strftime, toString), вычисление разницы между двумя моментами, добавление интервала (дней, месяцев, лет).
¶Часовые пояса и летнее время
Ключевая сложность работы с datetime — учёт часовых поясов и переходов на летнее время. Значение без указания пояса называется «наивным» (naive) и интерпретируется в локальном времени системы. «Осведомлённое» (aware) значение содержит смещение от UTC.
Переход на летнее время создаёт неоднозначности: осенью один и тот же локальный час встречается дважды, весной — час пропускается. Корректная обработка требует использования базы данных часовых поясов IANA (tzdata), которая содержит исторические правила переходов для всех регионов мира.
¶Особенности и ограничения
- Високосные секунды — Международная служба вращения Земли периодически добавляет дополнительную секунду к UTC; большинство компьютерных систем игнорируют это или обрабатывают через специальные механизмы.
- Проблема 2038 года — для 32-битных систем, хранящих время как знаковое целое секунд от 1970 года, наступит переполнение 19 января 2038 года.
- Календарная реформа — переход России на григорианский календарь в 1918 году (пропуск 14 дней) создаёт сложности при обработке исторических дат.
- Нулевой год — в григорианском календаре отсутствует, что учитывается в некоторых библиотеках.
¶Применение
Datetime используется повсеместно: в журналах событий (логах), системах бронирования, финансовых операциях, планировщиках задач, метаданных файлов (время создания и модификации), протоколах сетевого взаимодействия (заголовки HTTP, электронная почта). В научных вычислениях datetime применяется для привязки измерений и данных телеметрии.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →

