postgresql 如何将字符串转换为所需时区的时间戳

p3rjfoxz  于 12个月前  发布在  PostgreSQL
关注(0)|答案(5)|浏览(159)

我需要将一个表示某个时区(例如“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'


我被客户的时区设置误导了。

mzmfm0qo

mzmfm0qo1#

您可以在查询之前运行set time zone UTC;

set time zone UTC;
SELECT to_timestamp(field1, 'YYYY-MM-DD hh24:mi:ss')::timestamp without time zone at time zone 'Etc/UTC';

字符串
这解决了你的问题吗?

uinbv5nw

uinbv5nw2#

我的问题和OP的问题不一样,我的字符串已经知道它的时区,我只是想转换成timestamptz数据类型。
换句话说:“how to convert a string in a desired timezone,to a timestamp".我可以使用描述的方法herehere; casting with ::timestamptz
SELECT '2016-01-01 00:00+10'::timestamptz ;

sr4lhrrt

sr4lhrrt3#

首先使用以下查询找到您的默认时区。
第一个月
在我的情况下Asia/Karachi
k,现在尝试以下查询。

Select Cast('1990-01-25' as Date) at time zone '<Your Default Timezone>' at time zone 'utc';

字符串
在我的情况下。

Select Cast('1990-01-25' as Date) at time zone 'Asia/Karachi' at time zone 'utc';

6ioyuze2

6ioyuze24#

在我的情况下,这做的伎俩(感谢shajji回答)

to_timestamp(:date, 'YYYY-MM-DD"T"HH24:MI:SS:MS"Z"') at time zone (select current_setting('timezone')) at time zone 'Etc/UTC'

字符串

ldioqlga

ldioqlga5#

这个简单的方法对我来说很有效,你只需要声明没有时区的时间戳是UTC。无论你在服务器上有什么时区,时间戳都会被选中并显示在你的时区。

TO_TIMESTAMP(start_ts)::timestamp at time zone 'UTC'

字符串

相关问题