Подтвердить что ты не робот

Теперь() без часовой пояс

У меня есть столбец added_at типа timestamp without time zone. Я хочу, чтобы это значение по умолчанию являлось текущим датой, но без часового пояса. Функция now() также возвращает часовой пояс.

Как решить эту проблему?

4b9b3361

Ответ 1

SELECT now()::timestamp

Это все. Литье преобразует метку времени в текущую временную метку вашего часового пояса. Это также как стандартная функция SQL LOCALTIMESTAMP реализована в Postgres.

Если вы не работаете в нескольких часовых поясах, это работает нормально. Else переключитесь на timestamptz для added_at. Разница?

Ответ 2

Хорошо, вы можете сделать что-то вроде:

SELECT now() AT TIME ZONE current_setting('TimeZone');
SELECT now() AT TIME ZONE 'Europe/Paris';
SELECT now() AT TIME ZONE 'UTC';

Не уверен, как это имеет смысл для столбца "added_at". Вы почти всегда хотите, чтобы абсолютная метка времени (временная метка с часовым поясом) не была плавающей.


Изменить ответ на следующие пункты:

  • Да, следует использовать временную метку с часовым поясом (абсолютное время), если у вас нет веской причины не делать этого.

  • Часовой пояс клиента задается SHOW TimeZone или current_setting(...), как показано выше.

Потратьте некоторое время на просмотр руководств - они полностью охватывают все это.

Ответ 3

"Текущая дата/время" :

CURRENT_TIME и CURRENT_TIMESTAMP доставляют значения с часовым поясом; LOCALTIME и LOCALTIMESTAMP предоставляют значения без часовой пояс.