我需要将一个表示某个时区(例如“Etc/UTC”)中不带时区的时间戳(即“2017-03- 08 T20:53:05”)的字符串转换为带时区的时间戳。
问题是默认时区不是“Etc/UTC”。因此,当我尝试
SELECT to_timestamp(field1, 'YYYY-MM-DD hh24:mi:ss')::timestamp without time zone at time zone 'Etc/UTC'
字符串
它会将字符串转换为一个带有默认时区的值,然后应用从本地时区到“Etc/UTC”的转换。这不是必需的。
基本上,我在寻找一种方法来告诉posterre,原始字符串值代表的是特定时区的时间,而不是默认的本地时区。
谢谢
更新:我已经检查了上述语句是否有效。
SELECT to_timestamp(field1, 'YYYY-MM-DD hh24:mi:ss')::timestamp without time zone at time zone 'Etc/UTC'
型
我被客户的时区设置误导了。
5条答案
按热度按时间mzmfm0qo1#
您可以在查询之前运行
set time zone UTC;
:字符串
这解决了你的问题吗?
uinbv5nw2#
我的问题和OP的问题不一样,我的字符串已经知道它的时区,我只是想转换成
timestamptz
数据类型。换句话说:“how to convert a string in a desired timezone,to a timestamp".我可以使用描述的方法here和here; casting with
::timestamptz
SELECT '2016-01-01 00:00+10'::timestamptz
;sr4lhrrt3#
首先使用以下查询找到您的默认时区。
第一个月
在我的情况下
Asia/Karachi
k,现在尝试以下查询。
字符串
在我的情况下。
型
6ioyuze24#
在我的情况下,这做的伎俩(感谢shajji回答)
字符串
ldioqlga5#
这个简单的方法对我来说很有效,你只需要声明没有时区的时间戳是UTC。无论你在服务器上有什么时区,时间戳都会被选中并显示在你的时区。
字符串