我在欧洲/柏林时区 (+02),Postgresql 在 UTC (+00) 运行。我需要在最新的本地午夜日期(我的时区当天的开始日期)获取带有时区的时间戳。
因此,如果我们有 2013-03-03 14:00:00+02,我的最终结果将是这样的
2013-03-03 22:00:00+00
2013-03-04 00:00:00+02 // the same
我试图得到这个日期
SELECT TIMESTAMP 'today' AT TIME ZONE 'Europe/Berlin'
不幸的是,这会在 00:00 和 02:00 期间产生错误的日期(前一天午夜),因为 UTC 时间仍然是前一天,而今天似乎使用 utc 来计算其余时间。
如果我们在 Europe/Berlin 有 2013-03-03 00:05 这将返回
2013-05-01 22:00:00+00
如果我想获得正确的日期,我需要使用
SELECT date_trunc('day', now() AT TIME ZONE 'Europe/Berlin') AT TIME ZONE 'Europe/Berlin';
2013-05-02 22:00:00+00
这是正确的,但很丑陋。
这个命令有更简洁的变体吗?