【问题标题】:Summer and wintertime postgres timezone/timestamp夏季和冬季 postgres 时区/时间戳
【发布时间】:2018-05-15 09:01:26
【问题描述】:

我将 csv 数据上传到 postgres 的表格中。其中一列是具有时代填充的字符变化列。输入的数据如下:

Example record: 1507656308.

纪元字符变化列转换为时间戳列如下:

select 
    TIMESTAMP WITH TIME ZONE 'epoch' + timestamp::integer * INTERVAL '1 second' as timestamp
from
    table

结果看起来不错,我继续这样做。我住在荷兰,在这里我们每年有两次冬夏交替。显然我的数据没有区别。

我试图找出我当前的时区。我这样做了:

SELECT EXTRACT(TIMEZONE FROM timestamp) FROM table;

导致:

3,600.0000

当我试图弄清楚我的一般时区时,我得到了这个:

show timezone
= Europe/Berlin

如何让我的时间戳来识别夏季和冬季?还是我做错了什么?

【问题讨论】:

  • 要支持时区/夏令时,您应该使用 timestamptz 数据类型 insetad

标签: postgresql timestamp


【解决方案1】:

在所有将 epoch 值(为什么存储为字符串?)转换为 timestamp with time zone 的创造性方法中,这是最有趣的方法之一。

简单无聊的方式是

SET timezone = 'Europe/Berlin';

SELECT to_timestamp(1507656308);

      to_timestamp      
------------------------
 2017-10-10 19:25:08+02
(1 row)

时区偏移量为两个小时,因为 10 月 10 日是夏令时(中欧夏令时)。

确实:

SELECT extract(timezone FROM to_timestamp(1507656308));

 date_part 
-----------
      7200
(1 row)

所以一切都按预期工作,对吧?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-18
    • 2016-11-07
    • 2023-01-29
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多