postgresql - 将文本转换为 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"')
,但它不起作用。我无法弄清楚。
解决方案
对于毫秒 ( .MS
),您只能采用 3 位小数。如果您.US
改用,您可以投射 6 位数字。
但是,如果您不想在单独的操作中去除数字(并且如果您确定总是多出 3 个数字),您可以通过添加 9 模式 ( US999
) 来忽略它们。结果与之前使用剥离它的结果相同。
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'
如评论中所述:未正确考虑时区。"Z"
只忽略了字母 Z。要解析时区,您需要编写TZH:TZM
. 您应该使用 PostgreSQL 魔法的另一个原因。
推荐阅读
- laravel - 反斜杠导入文件 laravel 不起作用
- amazon-web-services - AWS NVME 重启后挂载到不同的目录
- elasticsearch - 无法提取托管在 AKS 上的弹性搜索集群传输层的证书
- sql - 如何添加 NOT NULL 约束以及列的默认值?
- java - 将 JavaFX 文档添加到 VSCode
- python - Filtering out contents of cells in DataFrames
- r - R中的快速单纯形
- c# - 如何在 C# 程序中转换“short[]”数组并输出为 txt/csv(人类可读)?
- deep-learning - CNN 如何处理 RGB 图像
- c++ - 为什么当我使用 localhost 时“inet_pton”返回 0?