2

我正在使用 postgresql 在数据库中存储一些日期。
在我的应用程序中,它完全了解时区是基本的,并且我在客户端、服务器和数据库之间进行了一些基本测试。

我正在从我在 GWT 中执行的浏览器应用程序发送日期,并在 postgresql 上读取日期。

我的测试:

客户总是在 GMT 时区,我总是为每个案例发送相同的日期。
2012 年 13 月 4 日 00:00:00 GMT+00

在 posgres 上,我正在更改每个测试的时区。在测试之间,我从表中删除所有日期。

要更改 posgres 上的时区,我在 {PostgreSQL HOME}\9.1\data\postgresql.conf 上将 timezene 设置为我想要的时间。

测试:客户端:13/04/2012 00:00:00 GMT+00

第一次测试 - posgres EST - 12/04/2012 19:00:00-05 根据postgresql 文档EST = GMT - 5
第二次测试 - posgres GMT + 5 - 12/04/2012 19:00:00-05
第三次测试 -后格林威治标准时间 - 5 - 13/04/2012 05:00:00+05

现在我的问题出现了:根据文档,EST = GMT - 5。那我为什么要反过来读呢?我在这里错过了什么吗?

编辑 我的测试的技术方面:
在客户端我发送这个:2012 Apr 13 00:00:00 GMT+00。
在服务器上,我使用 JDBC 在数据库上写入:
将 java.utils.date 转换为 java.sql.timestamp

java.sql.Timestamp sqlTimeStamp = new java.sql.Timestamp(date.getTime());
(日期是来自客户端的 java.utils.Date)

设置准备好的语句
PreparedStatement ps = con.prepareStatement("INSERT INTO teste.dates (dates_tz, dates_ntz) VALUES (?, ?);"

ps.setTimestamp(1, sqlTimeStamp); ...

作为记录,这只是我想理解的,因为总的来说它对我的目的很有效..

4

2 回答 2

11

考虑文档中的警告

要记住的另一个问题是,在 POSIX 时区名称中,正偏移量用于格林威治以西的位置。在其他任何地方,PostgreSQL 都遵循 ISO-8601 约定,即正时区偏移量位于格林威治以东。

看起来你看到的与 GMT 的相反迹象正是这种分歧的影响。postgresql.conf 中指定的时区可能用 POSIX 规则解释,但后来由 SQL 用 ISO-8601 规则(任何人真正使用的规则)显示。

于 2012-04-13T14:42:59.397 回答
1

当墙上的时钟显示2012-04-13 00:00在时区“+5”时,伦敦时间(GMT 或 UTC)为2012-04-12 19:00

如果您居住在美国,您当地的时区可能是“-5”。到了午夜时分,05:00伦敦已经是早晨了。

就是这样。这个关于在 PostgreSQL 中处理时区的详细答案可能会帮助您理解。

于 2012-04-13T11:54:21.570 回答