没有时区比较的POSTGRES时间

时间:2019-02-22 22:53:38

标签: postgresql time timezone

我正在尝试执行以下操作:

我有一个TIME列,其中存储没有偏移的时间。我还将时区列存储为字符串,格式为“美国/芝加哥”。

这里的想法是,我可以使用时间列并做(time_col AT TIME ZONE timezone)并将其与CURRENT_TIME进行比较,以确定它是否大于或小于确定是否应该触发某件事还是不在后端。

我无法将时间与时区存储在一起,因为这会处理某些事情开始时的情况,并且如果发生夏时制,它仍然会同时开始。如果发生DT / ST切换,则以时区偏移量存储将导致其关闭一个小时。例如从美国/芝加哥的下午5:00开始。当夏令时发生时,如果与时区一起存储,则现在是美国/芝加哥的下午6:00,但不应如此。即使使用时间切换,它仍然应该是5:00 PM。因此,动态增加偏移量可以防止这种情况。

但是,以下内容似乎根本没有增加时间偏移量:

SELECT time_col AS start_orig, (time_col AT TIME ZONE timezone) AS start_new, CURRENT_TIME as now_time FROM "time_test_table"

无论时区是什么(我尝试仅添加'America / Chicago'和'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

0 个答案:

没有答案