AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 316072
Accepted
gernot
gernot
Asked: 2022-08-26 10:14:14 +0800 CST2022-08-26 10:14:14 +0800 CST 2022-08-26 10:14:14 +0800 CST

Postgres:为什么 to_timestamp 在同一个查询中返回具有不同时区的日期?

  • 772

为什么to_timestamp在同一个查询中使用不同的时区来显示纪元?注意+02与+01。

=> select to_timestamp(1651157248),to_timestamp(1647224832);
      to_timestamp      |      to_timestamp      
------------------------+------------------------
 2022-04-28 16:47:28+02 | 2022-03-14 03:27:12+01
(1 row)

=> select version();
                                                                version                                                                 
----------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 12.12 (Ubuntu 12.12-0ubuntu0.20.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, 64-bit
(1 row)

=> show timezone;
   TimeZone    
---------------
 Europe/Vienna
(1 row)

可能与 3 月底从冬至夏时的转换有关,+01对应CET和。+02CEST

我如何使用to_timestamp它以使其始终使用相同的时间偏移量(无论是哪一个)?

postgresql timestamp
  • 2 2 个回答
  • 46 Views

2 个回答

  • Voted
  1. Best Answer
    Laurenz Albe
    2022-08-26T23:40:30+08:002022-08-26T23:40:30+08:00

    奥地利有夏令时,因此 PostgreSQL 将在冬季显示时间戳,其 UTC 偏移量与春季时间戳不同。 to_timestamp将 UTC 纪元转换为 (时区无关!) timestamp with time zone。仅当timestamp with timezone呈现为字符串时,才会根据 的当前设置来完成timezone。

    您的所有时间戳都显示在同一时区:Europe/Vienna. 该时区在一年中的不同时间与 UTC 有不同的偏移量。如果您希望以相同的 UTC 偏移量显示所有时间戳,请选择timezone没有夏令时的设置,例如UTC或+02。

    • 3
  2. gernot
    2022-08-27T10:12:50+08:002022-08-27T10:12:50+08:00

    to_timestamp根据当前设置的时区显示一个纪元,并带有适当的偏移量。如果时区恰好有夏令时 (DST),则选择的偏移量取决于时代是否落入 DST 的范围内。对于以下示例,请注意在 上2022-03-27 02:00:00+01,时区CET从标准时间切换到 DST。

    => set time zone 'CET';
    => select to_timestamp(1648342799) t,to_timestamp(1648342799+1) "t+1s";
               t            |          t+1s          
    ------------------------+------------------------
     2022-03-27 01:59:59+01 | 2022-03-27 03:00:00+02
    

    要获得相同的偏移量,请将时区设置为不带 DST 的时区:

    => set time zone 'UTC';
    => select to_timestamp(1648342799) t,to_timestamp(1648342799+1) "t+1s";
               t            |          t+1s          
    ------------------------+------------------------
     2022-03-27 00:59:59+00 | 2022-03-27 01:00:00+00
    

    或每次显示纪元时明确指定时区:

    => select to_timestamp(1648342799) at time zone 'CET' t,to_timestamp(1648342799+1) at time zone 'CET' "t+1s";
              t          |        t+1s         
    ---------------------+---------------------
     2022-03-27 01:59:59 | 2022-03-27 02:00:00
    
    • 1

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve