我正在尝试使用我在互联网上找到的这个查询来转换时区,但很难理解它。
基本上,我想从源文件中读取日期字符串并将其存储在该用户所在时区的数据库中。数据库列是时间 timestamp without time zone.
假设已知用户的时区是'America/Chicago'
,源文件时间戳是'2018-06-06 05:00:00'
现在要将源日期时间转换为这个时区,我使用了:
select (('2018-06-06 05:00:00'::timestamp AT TIME ZONE 'GMT' )
at time zone 'America/Chicago') as t
但是,这给出了 2018-06-06 00:00:00
,这是不正确的,因为时间被截断了。
如果我不将该值转换为时间戳,它会给出具有 GMT 偏移量的正确值 2018-06-06 10:00:00+05:30
。
select (('2018-06-06 05:00:00' AT TIME ZONE 'GMT' )
at time zone 'America/Chicago') as t
我不确定如何正确解释这些结果,而且我对时间戳/时区的了解也不是很好。任何人都可以解释如何理解这些查询以及简单地获取值 2018-06-06 10:00:00
的正确方法是什么,我必须将其存储在表中?
最佳答案
代码有效。时间没有被截断。格林威治标准时间凌晨 5:00 是芝加哥时间午夜。
但是,如果您想要上午 10:00,那么我认为您的时区倒退了,您真的想要:
select (('2018-06-06 05:00:00'::timestamp at time zone 'America/Chicago') at time zone 'GMT' ) as t
这会将芝加哥时间凌晨 5:00 转换为格林威治标准时间。
关于sql - 带时区的 Postgres 时间戳转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50896605/