POSTGRES Время без сравнения часовых поясов - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь сделать следующее:

У меня есть столбец 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...