Числовые типы
Форматы представления времени
Время, как и дата, может задаваться разными способами. В табл. 3.20 перечислены самые распространенные форматы значений типов time и time with time zone.
Taблица 3.20. Форматы представления времени.
Пример | Описание |
---|---|
01:24 | ISO-8601 с точностью до минут |
01:24 AM | Эквивалент 01:24 (суффикс AM используется только для наглядности и не влияет на значение) |
01:24 РМ | Эквивалент 13:24 (для использования суффикса РМ час должен быть меньше либо равен 12) |
13:24 | 24-часовой формат, эквивалент 01:24 РМ |
01:24:11 | ISO-8601, с точностью до секунд |
01:24:11.112 | ISO-8601, с точностью до микросекунд |
012411 | ISO-8601, с точностью до секунд, числовое форматирование |
В дополнение к этим форматам в PostgreSQL предусмотрена возможность уточнения времени в типах time и time with time zone. Дополнительные форматы перечислены в табл. 3.21.
Таблица 3.21. Допустимые форматы часового пояса.
Пример | Описание |
---|---|
01:24:11-7 | ISO-8601, GMT + 7 часов |
01:24:11-07:00 | ISO-8601, GMT + 7 часов 0 минут |
01:24:11-0700 | ISO-8601, GMT + 7 часов 0 минут |
01:24:11 PST | ISO-8601, тихоокеанское стандартное время (GMT + 7 часов) |
Примечание
В PostgreSQL поддерживаются все сокращенные обозначения часовых поясов, предусмотренные в стандарте ISO.
Тип time with time zone поддерживается в PostgreSQL в основном для сохранения совместимости с существующими стандартами SQL и другими СУБД. Если вам потребуется работать с часовыми поясами, рекомендуется использовать тип timestamp, описанный в следующем пункте. Это объясняется прежде всего тем, что из-за действия летнего времени осмысленная интерпретация часовых поясов иногда возможна лишь при наличии даты.
Во внутреннем представлении PostgreSQL вся информация о часовых поясах хранится в виде числового смещения от времени по Гринвичу (GMT), также называемого UTC (Universal Coordinated Time). По умолчанию PostgreSQL выводит время в часовом поясе, заданном в файле конфигурации операционной системы. Если вы хотите, чтобы время выводилось в другом часовом поясе, это можно сделать четырьмя способами.
- Настройка переменной среды TZ на сервере. Переменная используется для определения часового пояса по умолчанию при запуске postmaster. Например, она может задаваться в файле.bash_profile пользователя postgres командой export TZ='zone'.
- Настройка переменной среды PGTZ на стороне клиента. Переменная среды PGTZ может быть прочитана любым клиентом, написанным с использованием библиотеки libpq. Значение интерпретируется как стандартный часовой пояс клиента.
- Команда SQL SET TIMEZONE ТО. Команда устанавливает для текущего сеанса заданный часовой пояс (например, SET TIMEZONE TO UTC).
- Секция SQL AT TIME ZONE. Согласно стандарту SQL92 значение секции задается в виде обозначения часового пояса (например, PST) или интервала (например, Interval (-07:00')). Секция AT TIME ZONE включается в команду SQL после значения времени (например, SELECT my_t1mestamp AT TIME ZONT 'PST').
Примечание
Если переменная часового пояса содержит недопустимое значение, в большинстве систем по умолчанию используется время по Гринвичу (GMT). Кроме того, если при компиляции PostgreSQL был задан ключ USE_AUSTRALIAN_RULES, обозначение EST относится к австралийскому восточному стандартному времени (смещение +10.00 часов по отношению к GMT), а не к восточному стандартному времени США.