我的服务器在中央时间。我想使用东部时间呈现时间戳。
例如,我想将2012-05-29 15:00:00
呈现为2012-05-29 16:00:00 EDT
。
我该如何实现?
to_char('2012-05-29 15:00:00'::timestamptz at time zone 'EST5EDT', 'YYYY-MM-DD HH24:MI:SS TZ')
返回的结果是 2012-05-29 16:00:00
(没有时区)。
to_char('2012-05-29 15:00:00'::timestamp at time zone 'EST5EDT', 'YYYY-MM-DD HH24:MI:SS TZ')
返回的结果是 2012-05-29 14:00:00 CDT
(错误)。
下面这个方法虽然可行,但过于复杂了,应该有更简单的方法:replace(replace(to_char(('2012-05-29 15:00:00'::timestamptz at time zone 'EST5EDT')::timestamptz, 'YYYY-MM-DD HH24:MI:SS TZ'), 'CST', 'EST'), 'CDT', 'EDT')
to_char(x, 'TZ')
可以正确地区分CST和CDT,而at time zone EST5EDT
也能正确地处理夏令时。我唯一缺少的是使用这些信息进行优雅的渲染。 - Konrad Garustimestamp with time zone at _zone_
应该转换时区,但返回timestamp without time zone
。 - lanzztimestamp
<->timestamptz
转换并使用at time zone
,但是真的没有内置的方法来呈现不同的时区,比如fmt_date(x, 'YYYY-MM-DD HH24:MI:SS TZ', 'EST5EDT')
吗? - Konrad Garus