我有一个Java程序,它以PostgreSQL二进制格式生成时区值,以便在没有时区的情况下向包含时间戳列的表中插入数据。生成的数据被写入一个二进制文件,然后使用COPY命令将其插入到PostgreSQL中。
格式实际上是将数字8作为4字节值,后跟自2000年1月1日以来的微秒数作为8字节值。
我发现PostgreSQL和Java对时区偏移量的解释存在差异。当我尝试写入日期时:
我在Postgres中得到了2010-11-01 08:34:42.432作为时间戳。
进一步调查表明,Postgres认为2010年的UTC偏移量为-5,而Java认为其为-4(我相信这是正确的),导致了一个小时的差异。有人知道解决方法吗?
相关信息:
Postgresql版本9.2.4
Java:7
工作于美国东部时区(America/New_York)。
操作系统:Linux(时区设置正确)。
格式实际上是将数字8作为4字节值,后跟自2000年1月1日以来的微秒数作为8字节值。
我发现PostgreSQL和Java对时区偏移量的解释存在差异。当我尝试写入日期时:
2004-11-01 09:34:42.432
在Postgres二进制格式中,它是这样的
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x8a, 0xcd, 0xe3, 0x10, 0x68, 0x00
并且Postgres正确地报告了日期。然而,如果我输入日期
2010-11-01 09:34:42.432
在二进制中表示为
0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x36, 0xf8, 0x72, 0xcb, 0x64, 0x00
我在Postgres中得到了2010-11-01 08:34:42.432作为时间戳。
进一步调查表明,Postgres认为2010年的UTC偏移量为-5,而Java认为其为-4(我相信这是正确的),导致了一个小时的差异。有人知道解决方法吗?
相关信息:
Postgresql版本9.2.4
Java:7
工作于美国东部时区(America/New_York)。
操作系统:Linux(时区设置正确)。