首页 > 数据库 >PostgreSQL应该用哪个时区表示符?

PostgreSQL应该用哪个时区表示符?

时间:2024-03-08 18:22:50浏览次数:26  
标签:03 00 PostgreSQL 08 Asia 2024 哪个 CST 应该

PG中国用哪个时区标识符?

在linux中使用timedatectl查看时间,可以看到localtime中时区是CST

$ timedatectl 
  Local time: Mon 2024-03-04 18:19:54 CST
  Universal time: Mon 2024-03-04 10:19:54 UTC
  RTC time: Mon 2024-03-04 10:19:53
  Time zone: Asia/Shanghai (CST, +0800)

CST是一个多重含义的时区缩写,可表示以下时区:

  • 美国中部时间:Central Standard Time (USA) UT-6:00
  • 澳大利亚中部时间:Central Standard Time (Australia) UT+9:30
  • 中国标准时间:China Standard Time UT+8:00
  • 古巴标准时间:Cuba Standard Time UT-4:00

但在PG中,CST 这个时区会被处理为 -6 时区(美国中部时间)。所以如果PG中如果用的时区标识符为CST,可能会带来些问题。 PG中可以使用 'Asia/Hong_Kong' 作为时区替代,其他如'Hongkong', 'Etc/GMT-8'也可以。

postgres=# \d+ tt_cst 
                                            Table "public.tt_cst"
 Column |            Type             | Collation | Nullable | Default | Storage | Stats target | Description 
--------+-----------------------------+-----------+----------+---------+---------+--------------+-------------
 f1     | integer                     |           |          |         | plain   |              | 
 f2     | timestamp without time zone |           |          |         | plain   |              | 
 f3     | timestamp with time zone    |           |          |         | plain   |              | 
 f4     | timestamp with time zone    |           |          |         | plain   |              | 
Access method: heap

postgres=# show timezone;
   TimeZone    
---------------
 Asia/Shanghai
(1 row)

postgres=# insert into tt_cst values(1,'2024-03-08 17:56:48 CST','2024-03-08 17:56:48 CST','2024-03-08 17:56:48 HKT');
INSERT 0 1
postgres=# select * from tt_cst ;
 f1 |         f2          |           f3           |           f4           
----+---------------------+------------------------+------------------------
  1 | 2024-03-08 17:56:48 | 2024-03-09 07:56:48+08 | 2024-03-08 17:56:48+08
(1 row)
-- 插入的3个时间数据,f2列因为ts without time zone的,所以直接忽略了时区标识符CST,f3列PG把CST时区解析为美国中部时间:Central Standard Time (USA) UT-6:00,pg系统的时区是Asia/Shanghai即UT+8:00,相差了14小时,所以f2列数据插入时要时区换算,'2024-03-08 17:56:48 CST'的基础上+14小时,即'2024-03-09 07:56:48+08';另外f4列采用了HKT即Asia/Hong_Kong来标示中国时区+08,则没有问题。

当然,pg中+08时区的时区标识符还有其他(如下),也可以用来做为中国localtime的时区。

postgres=# select * from pg_timezone_names where utc_offset='08:00:00';
        name        | abbrev | utc_offset | is_dst 
--------------------+--------+------------+--------
 Asia/Makassar      | WITA   | 08:00:00   | f
 Asia/Kuching       | +08    | 08:00:00   | f
 Asia/Ulaanbaatar   | +08    | 08:00:00   | f
 Asia/Choibalsan    | +08    | 08:00:00   | f
 Asia/Manila        | PST    | 08:00:00   | f
 Asia/Singapore     | +08    | 08:00:00   | f
 Asia/Irkutsk       | +08    | 08:00:00   | f
 Asia/Brunei        | +08    | 08:00:00   | f
 Asia/Kuala_Lumpur  | +08    | 08:00:00   | f
 Asia/Chongqing     | CST    | 08:00:00   | f
 Asia/Harbin        | CST    | 08:00:00   | f
 Asia/Chungking     | CST    | 08:00:00   | f
 Asia/Macao         | CST    | 08:00:00   | f
 Asia/Ujung_Pandang | WITA   | 08:00:00   | f
 Asia/Ulan_Bator    | +08    | 08:00:00   | f
 Asia/Shanghai      | CST    | 08:00:00   | f
 Asia/Hong_Kong     | HKT    | 08:00:00   | f
 Asia/Taipei        | CST    | 08:00:00   | f
 Asia/Macau         | CST    | 08:00:00   | f
 Australia/Perth    | AWST   | 08:00:00   | f
 Australia/West     | AWST   | 08:00:00   | f
 Etc/GMT-8          | +08    | 08:00:00   | f
 Hongkong           | HKT    | 08:00:00   | f
 PRC                | CST    | 08:00:00   | f
 ROC                | CST    | 08:00:00   | f
 Singapore          | +08    | 08:00:00   | f
(26 rows)

参考

PostgreSQL: Documentation: 7.2: Time Zones

标签:03,00,PostgreSQL,08,Asia,2024,哪个,CST,应该
From: https://www.cnblogs.com/qingfengsheng/p/18061602

相关文章

  • 在Docker中,构建镜像应该遵循哪些原则?
    构建Docker镜像时,应当遵循以下一系列最佳实践和原则,以确保镜像的高效、安全和易于维护:镜像最小化:选择尽可能小的基础镜像,如AlpineLinux,或者针对特定场景选择轻量级的基础镜像。只安装应用程序运行所必需的软件包和服务,避免无关组件和文件。在构建过程中清理临时文件和构建......
  • Hexo、VitePress、Docusaurus,哪个最适合你的静态网站生成器?
    在选择合适的静态网站生成器时,Hexo、VitePress、Docusaurus是三个备受关注的选项,那么到底哪一个框架更适合你呢?本文将从使用场景、社区生态、功能、性能、扩展性这五个方面,帮你全方位分析各个框架的优缺点,以便为你的技术选型提供参考。1、应用场景Hexo,官方定位自己是"快速......
  • PostgreSQL的generate_series函数应用
    一、简介PostgreSQL中有一个很有用处的内置函数generate_series,可以按不同的规则产生一系列的填充数据。二、语法函数参数类型返回类型描述generate_series(start,stop)int或bigintsetofint或setofbigint(与参数类型相同)生成一个数值序列,从start到stop,步进......
  • 获客系统软件排行榜销售找精准客户资源软件哪个靠谱
    在众多获客系统软件中,微拓客无疑是一款备受推崇的佼佼者。作为市场上领先的获客系统软件之一,微拓客凭借其强大的功能和优秀的用户体验,赢得了广大用户的青睐。微拓客的功能与优势多渠道获客:微拓客集成了多种获客渠道,包括地图商家信息、社交平台等,为用户提供了多样化的客户获取方......
  • POSTGRESQL (PG) 6种索引类型介绍以及使用实例
    Postgresql中主要支持6种类型的索引:BTREE、HASH、GiST、SP-GiSP、GIN、BRIN。可以根据实际的应用场景选择合适的索引,BTREE、HASH是比较常用的索引。1.BTREE索引:CREATEINDEX默认使用BTREE索引,适合按照顺序存储的数据进行比较查询和范围查询,查询优化器会优先考虑使用BTREE索引,如......
  • Java连接PostgreSQL数据库测试
    importjava.sql.DriverManager;importjava.sql.Connection;importjava.sql.SQLException;importjava.sql.ResultSet;importjava.sql.Statement;publicclassPG{publicstaticvoidmain(String[]args){System.out.println("PostgreSQLJDBC......
  • nginx反向代理服务器实现postgreSQL
    可访问的地址:192.168.1.200:9856不可访问的地址:192.168.214.133:32222(pg库的地址)在192.168.1.200服务器上安装nginx,设置一个监听的端口(9856),将地址二192.168.214.133:32222映射到这个端口(版本要大于nginx1.9.xxx,stream和http是同级关系,在Navicat上通过连接主机-192.168.1......
  • docker安装postgreSql
    拉取镜像控制台运行以下代码(如果需要指定版本,则将latest改为对应的版本号)dockerpullpostgres:latest创建容器dockerrun-it--namepostgresql--privileged-ePOSTGRES_PASSWORD=123456-p5432:5432-vC:\SolutionSpace\docker\postgresql:/var/lib/postgresql/data......
  • 导入Excel文件的时候公式为【#Ref!】应该怎么解决?
    前言在我们使用Excel时,经常会遇到一个问题,就是导入Excel时公式显示为【#Ref!】的情况。这通常是因为公式中引用的单元格已被删除或对应的工作表被删除,导致原公式无法识别对应的参数而显示为【#Ref!】。比如在一张Excel表中,sheet1中A1单元格的公式为‘=Sheet2!B1’,如果Sheet2......
  • PostgreSQL 在使用连表语句时报错 ERROR: operator does not exist: bigint = charact
    背景在使用PostgreSQL数据库过程中,使用了连表语句如下所示,其中a表的order_no为bigint类型,b表的order_no为varchar类型select*fromtable_orderainnerjointable_order_itembona.order_no=b.order_no;遇到提示:ERROR:operatordoesnotexist:bigint=characterv......