PostgreSQL 9.1时区

PostgreSQL 9.1时区,postgresql,datetime,jdbc,timezone,Postgresql,Datetime,Jdbc,Timezone,我正在使用postgresql在数据库中存储一些日期。 在我的应用程序中,最基本的是它完全了解时区,并且我正在进行一些基本的测试,包括客户端、服务器和数据库之间的测试 我正在从我在GWT中使用的浏览器应用程序发送日期,并在postgresql上读取日期 我的测试: 客户始终处于GMT时区,我将为每个案例发送相同的日期。 2012年4月13日00:00:00 GMT+00 在POSGRE考试中,我会改变每次考试的时区。在测试之间,我将从表中删除所有日期 要更改POSGRE上的时区,我在{Postg

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

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

我的测试:

客户始终处于GMT时区,我将为每个案例发送相同的日期。
2012年4月13日00:00:00 GMT+00

在POSGRE考试中,我会改变每次考试的时区。在测试之间,我将从表中删除所有日期

要更改POSGRE上的时区,我在{PostgreSQL HOME}\9.1\data\PostgreSQL.conf上进行更改,将timezene设置为我想要的

测试: 客户:2012年4月13日00:00:00 GMT+00

第一次测试-posgres EST-12/04/2012 19:00:00-05 根据EST=GMT-5
第二次测试-posgres GMT+5-2012年4月12日19:00:00-05
第三次测试-posgres GMT-5-13/04/2012 05:00:00+05

现在我的问题来了:根据文件,EST=GMT-5。那我为什么要反过来看呢? 我是不是遗漏了什么

编辑 我的测试的技术方面:

在客户机上,我发送此消息:2012年4月13日00:00:00 GMT+00。
在服务器上,我使用JDBC在db上编写:
将java.utils.date转换为 java.sql.timestamp

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

设置准备好的语句
PreparedStatement ps=con.prepareStatement(“插入测试日期(dates,dates,ntz)值(?,);”

ps.setTimestamp(1,sqlTimeStamp)


作为记录,这只是我想了解的一点,因为就我的目的而言,它总体上运行良好。

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

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

就是这样。这个关于的详细答案可能会帮助你理解。

考虑一下:

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

你看到的格林尼治标准时间的相反迹象正是这种差异的影响。
postgresql.conf中指定的时区可能是用POSIX规则解释的,但它稍后由SQL用ISO-8601规则(任何人都真正使用的规则)显示.

请显示测试中使用的实际语句。在客户端,我发送此消息:2012年4月13日00:00:00。在服务器上,使用JDBC在db上写入:java.sql.Timestamp sqlTimeStamp=new java.sql.Timestamp(date.getTime());(来自客户端的日期是java.utils.date)插入dbFoo.dates_表(date_tz)值(?);ps.setTimestamp(1,sqlTimeStamp);请编辑您的问题,而不是将信息放在评论中。这更容易阅读。你说得对,对不起。我编辑了这篇文章。我知道。问题是:根据文档,GMT-5与EST完全相同。在posgres上,它显示相反。EST等于GMT+5。谢谢!这回答了我的疑问。:)这就是我在过去两个小时里一直困惑的地方。难道没有什么好的解决办法吗?谢谢你的解释!