Re: TIMESTAMP value binary transfer problem

From: John Lister <john(dot)lister(at)kickstone(dot)com>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: TIMESTAMP value binary transfer problem
Date: 2014-10-27 10:30:06
Message-ID: 544E1EAE.9010605@kickstone.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

You are right it is related to timezones and daylight saving. I haven't
looked through the recent code, but from memory the old code used to use
a date in 1970 (epoch year) to calculate daylight saving offsets, etc
This causes problems if the timezone information has changed between
then and now. I know this was a problem for UK which was experimenting
with daylight savings during 1970 and causes the calculations to be off.
I'll dig into the code again when I have a minute to find out where this
occurs and if it is in the JDK or the JDBC code.

John
On 26/10/2014 21:51, Vladimir Crnčić (Infoart d.o.o.) wrote:
>
> Well, the server and the client are on the same development Windows 7
> machine. I've done some testing using class in attachment and found
> out that results depend on time zone and daylight saving settings, in
> some zones results are always correct, in some are correct with
> daylight saving turned off, in some with daylight saving turned on,
> and so on. Obviously there's some problem with incoming binary data
> or time zone compensation in TimestampUtils.toTimestampBin()
>
> if (!timestamptz) {
>
> if (tz == null) {
>
> tz = defaultTz;
>
> }
>
> millis -= tz.getOffset(millis);
>
> }
>
> I don't really understand why this compensation is needed in the first
> place, conversion in TimestampUtils.toTimestamp() takes no time zone
> in account with TIMESTAMP type. Anyway, getting different results
> depending on data transfer type is unacceptable.
>
> *From:*John Lister [mailto:john(dot)lister(at)kickstone(dot)com]
> *Sent:* Saturday, October 25, 2014 10:26 PM
> *To:* Dave Cramer; Vladimir Crnčić (Infoart d.o.o.)
> *Cc:* List
> *Subject:* Re: [JDBC] TIMESTAMP value binary transfer problem
>
> There was a problem with some time zones from memory, in the uk for
> example 1970 had an odd daylight saving period and because 1970 is
> used in calculating the time values in the driver this skews the
> results in the driver. Using the current year fixes it when
> calculating times.
>
> Maybe something to check.
>
> On 25 October 2014 19:21:25 GMT+01:00, Dave Cramer <pg(at)fastcrypt(dot)com
> <mailto:pg(at)fastcrypt(dot)com>> wrote:
>
> This is the same as https://github.com/pgjdbc/pgjdbc/pull/133
>
> So what I am wondering is why a small number of people see this
> and the rest are fine ???
>
> What is unique about your environment. Are the server and the
> client on the same timezone ?
>
>
> Dave Cramer
>
> dave.cramer(at)credativ(dot)ca
> http://www.credativ.ca
>
> On 22 October 2014 14:03, Vladimir Crnčić (Infoart d.o.o.)
> <vcrncic(at)infoart(dot)hr <mailto:vcrncic(at)infoart(dot)hr>> wrote:
>
> There is a problem with JDBS driver interpretation of
> "timestamp without time zone" values when binary transfer is
> on. When binary transfer is disabled for TIMESTAMP columns
> (binaryTransferDisable=TIMESTAMP or binaryTransfer=false)
> problem does not occur.
>
> database version: 9.1.1
>
> driver version: 9.2, 9.3
>
> BINARY TRANSFER:
>
> ----------------
>
> database value (TIMESTAMP): 2014-10-26 01:00:04
>
> bytes (AbstractJdbc2Resultset): [0, 1, -87, 71,
> -77, -6, 45, 0]
>
> long value (TimestampUtils): 467600404000000
>
> java timestamp (TimestampUtils): 2014-10-26
> 02:00:04.0 (not OK)
>
> TEXT TRANSFER:
>
> --------------
>
> database value (TIMESTAMP):
> 2014-10-26 01:00:04
>
> string value (AbstractJdbc2Resultset): 2014-10-26 01:00:04
>
> java timestamp (TimestampUtils):
> 2014-10-26 01:00:04.0 (OK)
>
>
> --
> Sent from my Android device with K-9 Mail. Please excuse my brevity.
>
>
>

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Dave Cramer 2014-10-28 11:19:30 Re: TIMESTAMP value binary transfer problem
Previous Message Vladimir Crnčić (Infoart d.o.o.) 2014-10-26 21:51:35 Re: TIMESTAMP value binary transfer problem