kad*_*kaz 5 postgresql timezone jodatime
我正在使用转换为新时区 UTC+3,它等于 EAT 时区,但 Postgres (9.1) 显示错误的时间
select '2015-01-13 08:40:00.0'::timestamp with time zone AT TIME ZONE 'UTC+03',
'2015-01-13 08:40:00.0'::timestamp with time zone AT TIME ZONE 'EAT';
Run Code Online (Sandbox Code Playgroud)
(这里默认时区是斯德哥尔摩)
结果是
"2015-01-13 04:40:00",
"2015-01-13 10:40:00"
Run Code Online (Sandbox Code Playgroud)
为什么?
应该是 2015-01-13 10:40:00
如果将 JodaTime 与两个时区一起使用,那么它会显示相同的正确结果“2015-01-13 10:40:00”。
从 Postgres文档中可以选择使用::timestamptz代替::timestamp WITH TIME ZONE,并且我在进行转换时发现了首选结果;因为它是可用选项中最简洁的,同时仍然具有可读性。
SELECT created_at
,created_at::timestamp AT TIME ZONE 'EDT' -- yields bad result
,created_at::timestamp WITH TIME ZONE AT TIME ZONE 'EDT'
,created_at AT TIME ZONE 'UTC' AT TIME ZONE 'EDT'
,created_at::timestamptz AT TIME ZONE 'EDT'
Run Code Online (Sandbox Code Playgroud)
2019-03-29 18:49:25.250431 -- raw UTC data
2019-03-29 22:49:25.250431 -- erroneous result
2019-03-29 14:49:25.250431 -- accurate result
2019-03-29 14:49:25.250431 -- accurate result
2019-03-29 14:49:25.250431 -- accurate result
Run Code Online (Sandbox Code Playgroud)
拼写为“UTC+3:00”的时区名称是 POSIX 时区规范。在这种风格中,GMT 以西的区域名称中带有正号,而以东的区域名称中带有负号(例如“Etc/GMT-14”是 GMT 之前/以东 14 小时。)
请参阅http://www.postgresql.org/docs/9.3/static/datatype-datetime.html#DATATYPE-TIMEZONES
| 归档时间: |
|
| 查看次数: |
9857 次 |
| 最近记录: |