今天早上我遇到了以下问题:
select '2011-12-30 00:30:00'::timestamp without time zone AT TIME ZONE 'EST5EDT';
Run Code Online (Sandbox Code Playgroud)
回报我2011-12-30 05:30:00+00女巫是错的.
但下面的查询如下:
select '2011-12-30 00:30:00'::timestamp without time zone AT TIME ZONE 'UTC-5';
select '2011-12-30 00:30:00' AT TIME ZONE 'EST5EDT';
Run Code Online (Sandbox Code Playgroud)
我看到了正确的约会 2011-12-29 19:30:00
防止您对我当地时区的提问:
SELECT current_setting('TIMEZONE');
current_setting
-----------------
UTC
(1 row)
Run Code Online (Sandbox Code Playgroud)
有没有人回答为什么postgresql会转换timestamp without time zone一些奇怪的方式而不是带走5个小时呢?
我需要以下列格式显示和处理UTC日期:
2013-06-28T22:15:00Z
由于此格式是ISO8601标准的一部分,因此我可以轻松地从上面的字符串创建DateTime对象.但是,我无法找到一种干净的方式(意味着没有字符串操作,如substr和replace等)以所需的格式显示我的DateTime对象.我试图调整服务器和php日期时间设置,但收效甚微.我总是得到:
$date->format(DateTime::ISO8601); // gives 2013-06-28T22:15:00+00:00
Run Code Online (Sandbox Code Playgroud)
是否有任何日期格式或配置设置将给我所需的字符串?或者我必须手动将'Z'附加到自定义时间格式?