PostgreSQL的9.1时区(PostgreSQL 9.1 timezones)

2019-09-16 12:54发布

我使用PostgreSQL到一个数据库中存储一些日期。
在我的应用程序是根本的,它是完全知道的时区,我是进行一些基本的测试之间,客户端,服务器和数据库。

我是从一个浏览器的应用程序发送的日期我在GWT没有和阅读PostgreSQL的日期。

我的测试:

客户永远是在GMT时间,而我总是发送每种情况相同的日期。
13/04/2012 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
第三测试 - posgres GMT - 5 - 05 13/04/2012:00:00 + 05

现在我的问题上升:根据该文档,EST = GMT - 5。那么,为什么我读它周围的其他方法? 我失去了一些东西在这里?

我的测试编辑技术方面:
在客户端我送这样的:2012年04月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); ...

根据记录,这只是我想明白了,因为总体而言,它很适合我的目的..

Answer 1:

考虑到文档中的警告 :

要记住的另一个问题是,在POSIX时区名称,正面偏置用于格林威治以西的位置。 在其他地方,PostgreSQL的遵循ISO-8601惯例正时区偏移量是东格林尼。

它看起来像对GMT符号相反你看到的正是发散的效果。 在postgresql.conf中指定的时区可能与POSIX规则解释,但它后来与ISO-8601的规则(即人真正使用的)SQL显示。



Answer 2:

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

如果你住在美国,你的本地时区可能是“-5”。 当它的午夜时分,它是05:00 ,在伦敦的早晨。

这只是它是如何。 关于这详尽的解答在PostgreSQL的时区的处理可以帮助你理解。



文章来源: PostgreSQL 9.1 timezones