首页 > 解决方案 > 将文本转换为 UTC 时间戳

问题描述

我的表格中有文本格式的时间戳。它的格式如下2019-05-30T05:48:29.095705642+01:00。我想将其转换为 UTC 时间戳。

我正在考虑首先将文本转换为时间戳,然后将其转换为 UTC。我正在执行SELECT TO_TIMESTAMP('2019-05-30T05:48:29.095705642+01:00', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'),但它不起作用。我无法弄清楚。

标签: postgresql

解决方案


对于毫秒 ( .MS),您只能采用 3 位小数。如果您.US改用,您可以投射 6 位数字。

但是,如果您不想在单独的操作中去除数字(并且如果您确定总是多出 3 个数字),您可以通过添加 9 模式 ( US999) 来忽略它们。结果与之前使用剥离它的结果相同。

文件(表 9.26)

SELECT 
    TO_TIMESTAMP(
        '2019-05-30T05:48:29.095705642+01:00', 
        'YYYY-MM-DD"T"HH24:MI:SS.US999"Z"'
     )


但最简单的方法——如果你真的有这种日期格式——是直接转换成 timestamptz。PostgreSQL 为你做了魔法,不需要考虑小数位数:

SELECT '2019-05-30T05:48:29.095705642+01:00'::timestamptz

从文本转换为时间戳后,您可以使用以下命令切换时区at time zone 'UTC'

SELECT '2019-05-30T05:48:29.095705642+01:00'::timestamptz at time zone 'UTC'

演示:db<>小提琴


如评论中所述:未正确考虑时区。"Z"只忽略了字母 Z。要解析时区,您需要编写TZH:TZM. 您应该使用 PostgreSQL 魔法的另一个原因。


推荐阅读