我们在使用GregorianCalendar的java代码中运行。我们想在postgresql数据库中将它们作为GMT + 0时间在时间戳类型列中保留,但我们不确定如何去做。这些字段应该带有时间戳还是没有?通过一个类似的标记“当前”时间postgres功能我们应该使用current_timestamp or localtimestamp?
答案 0 :(得分:33)
从这里开始 - 第8.5.3节。来自文档的“Time Zones”。
CURRENT_TIMESTAMP和LOCALTIMESTAMP之间的区别是结果的类型 - 前者返回“带时区的时间戳”,后者返回“时间戳”:
milen=> select CURRENT_TIMESTAMP;
now
-------------------------------
2009-09-05 01:21:37.595704+03
(1 row)
milen=> select LOCALTIMESTAMP;
timestamp
----------------------------
2009-09-05 01:21:41.956355
(1 row)
完全在你希望看到当前时间的时区是另一回事。在这种情况下,默认时区(可以通过多种方式设置,所有这些都在上面链接的部分中描述)很重要。您还可以在查询中使用"AT TIME ZONE"来获取特定时区的当前时间,而无需“摆弄”“时区”设置:
milen=> select CURRENT_TIMESTAMP AT TIME ZONE 'UTC';
timezone
----------------------------
2009-09-04 22:21:44.418236
(1 row)