【发布时间】:2017-12-16 08:33:42
【问题描述】:
我在表格中有一个“带时区的时间戳”字段。
我需要返回给定时区中的 iso 8601 字符串。
我设法做的最接近的事情是:
select to_char(crtdate, 'YYYY-MM-DD"T"HH24:MI:SS.MSOF:"00"') from t1
但它会返回系统默认时区 (UTC) 中的时间戳,例如:
2017-07-12T02:46:26.194+00:00
虽然我需要将其格式化为特定时区。
例如。
2017-07-12T14:46:26.194+12:00
代表“太平洋/奥克兰”。
有人可以告诉我如何实现吗?
我们正在使用 PG v 9.6。
谢谢你,
【问题讨论】:
-
@a_horse_with_no_name 这将给出 Postgres 格式的时间戳,而不是 ISO 8601
-
您是否需要获取当前
timezoneGUC 设置的值(由set timezone = ...;设置)或者您想要动态(不接触GUC)获取不同时区的ISO8601 值?跨度> -
@a_horse_with_no_name 内部,没有任何格式,没错,但是有一个默认的输出格式,这就是这里的重点。更重要的是,你的 cmets 导致的不是主题启动者需要的方向——
at time zone ...会给你一个没有任何时区信息的值,而作者需要 ISO 8601,有小时班次(但是,at time zone ...可以帮助构建适当的自定义函数) -
如果你对“有”输出格式有任何疑问——postgresql.org/docs/current/static/…“日期/时间类型的输出格式可以设置为ISO 8601、SQL(Ingres)四种样式之一、传统的 POSTGRES(Unix 日期格式)或德语。”
-
这可能会有所帮助:stackoverflow.com/q/10797720/330315 或 this
标签: postgresql