【问题标题】:Postgres UTC date format & epoch cast, sign inversionPostgres UTC 日期格式和纪元转换,符号反转
【发布时间】:2012-01-14 00:13:42
【问题描述】:

谁能解释一下这个符号反转,我在这里迷路了......

SELECT EXTRACT(EPOCH FROM '01-01-1970 00:00:00 UTC+01'::timestamp with time zone)

=> 3600

SELECT EXTRACT(EPOCH FROM '1970-01-01 00:00:00+01'::timestamp with time zone)

=> -3600

Postgres 8.3.14

【问题讨论】:

  • SELECT EXTRACT(EPOCH FROM '1970-01-01 00:00:00 PST+01'::timestamp with time zone) 也是 3600 SELECT EXTRACT(EPOCH FROM '1970-01-01 00 :00:00 LOL+01'::timestamp with time zone) 也是 3600 我猜 postgres 有一种奇怪的方式来判断日期格式无效...

标签: postgresql timezone


【解决方案1】:

这个

1970-01-01 00:00:00+01

ISO 8601 timestamp with a +1 hour offset,+1 表示格林威治以东。这些中的偏移量

01-01-1970 00:00:00 UTC+01
1970-01-01 00:00:00 UTC+01
1970-01-01 00:00:00 XXX+01
1970-01-01 00:00:00 HAHA+01
1970-01-01 00:00:00 Pancakes+01

将被解释为POSIX style timezones,其中+1 表示格林威治西部

PostgreSQL 将接受 STDoffset 或 STDoffsetDST 形式的 POSIX 样式时区规范,其中 STD 是区域缩写,offset 是距离 UTC 以西以小时为单位的数字偏移量

那些甚至带有警告:

人们应该警惕 POSIX 风格的时区功能可能会导致默默地接受虚假输入,因为没有检查时区缩写的合理性。例如,SET TIMEZONE TO FOOBAR0 将起作用,使系统有效地使用一个相当特殊的 UTC 缩写。要记住的另一个问题是,在 POSIX 时区名称中,正偏移量用于格林威治以西的位置。在其他任何地方,PostgreSQL 都遵循 ISO-8601 约定,即正时区偏移量位于格林威治以东。

注意东西方的差异。

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2011-10-04
    • 2011-06-05
    • 2019-09-26
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 2016-08-29
    • 2019-11-14
    相关资源
    最近更新 更多