Я пытаюсь сделать следующее:
У меня есть столбец TIME
, где я храню время без смещения.Я также храню столбец часового пояса в виде строки в формате «Америка / Чикаго».
Смысл здесь в том, что я могу взять столбец времени и сделать (time_col AT TIME ZONE timezone
) и сравнить его с CURRENT_TIME
определить, больше или меньше, чем определить, должно ли что-то срабатывать на бэкэнде.
Я не могу сохранить время в часовом поясе, так как это имеет дело с ситуацией, когда что-то начинается, и если дневной светпроисходит экономия, она все еще начинается одновременно.Сохранение со смещением часового пояса приведет к его отключению на час, если произойдет переключение DT / ST.Ex.Начало в 5:00 вечера Америка / Чикаго.Когда происходит переход на летнее время, если он хранится в часовом поясе, сейчас 18:00 по Америке / Чикаго, но этого не должно быть.Это должно быть еще 5:00 вечера, даже с переключателем времени.Таким образом, добавление смещения на лету предотвращает это.
Однако следующее, похоже, не добавляет никакого смещения ко времени вообще:
SELECT time_col AS start_orig, (time_col AT TIME ZONE timezone) AS start_new, CURRENT_TIME as now_time FROM "time_test_table"
Независимо от того, что часовой пояс (Iпопробовал просто добавить «Америка / Чикаго» и «utc») время не меняется и не отображается со смещением.
Например:
timezone start_orig start_new now_time
--------------- ---------- --------- --------
America/Chicago 19:00:00 19:00:00 16:49:50
Я понял, я 'Я стал умным и переключил часовой пояс на CURRENT_TIME
, чтобы увидеть, функционировал ли AT TIME ZONE
, как говорят документы, и он, кажется, не:
SELECT CURRENT_TIME AS now_time, (CURRENT_TIME AT TIME ZONE 'utc') AS utc_time, (CURRENT_TIME AT TIME ZONE 'America/Chicago') AS ct_time FROM "time_test_table"
now_time utc_time ct_time
-------- -------- --------
16:51:28 16:51:28 16:51:28
Для справки: https://www.postgresql.org/docs/9.6/functions-datetime.html
Кто-нибудь имел дело с AT TIME ZONE
раньше?Где здесь происходит мое недоразумение?
РЕДАКТИРОВАТЬ Postgres версия 9.4.6 Колонка времени:
TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS NUM_PREC_RADIX NULLABLE REMARKS COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE SCOPE_CATLOG SCOPE_SCHEMA SCOPE_TABLE SOURCE_DATA_TYPE IS_AUTOINCREMENT
(null) public time_test_table time_col 92 time 15 (null) 6 10 1 (null) (null) (null) (null) 15 30 YES (null) (null) (null) (null) NO
(null) public time_test_table timezone 12 varchar 255 (null) 0 10 1 (null) (null) (null) (null) 255 8 YES (null) (null) (null) (null) NO