From: Aleksey Demakov <avd@gcom.ru>
To: pgsql-interfaces@postgresql.org
Cc: Peter T Mount <peter@retep.org.uk>
Subject: JDBC, Timestamps, and DateStyle
Date: 27 Oct 1998 17:51:31 +0600
Message-ID: <87ww5mrznf.fsf@avd.garsib.ru> (raw)
I had problems reading datetime fields with the ResultSet.getTimestamp
method. First, it looks like this method always assumes that DateStyle
is ISO. At the same time the driver checks current DateStyle in the case
of Dates and acts accordingly. IMHO, it's a bit incosistent.
As I recall the ODBC driver has no such problems because it always uses
the same format for communication with backend. It sets it when it opens
a connection.
But it is not my main problem since I can set DateStyle by myself.
The other problem is that the driver simetimes fails to parse timestamps.
I found two reasons for this. The first is that the timestamp can contain
fractions of second. The second relates to timezones. I don't quite
understand it, though. I simply rewrote the code so it works for me. And
I believe it should also work for others.
The patch is below.
Aleksey
inline patch 1: ResultSet.java (+22/-8 lines) download inline-1.patch*** ResultSet.java.old Thu Sep 3 14:00:49 1998
--- ResultSet.java Tue Oct 27 16:21:53 1998
***************
*** 448,463 ****
public Timestamp getTimestamp(int columnIndex) throws SQLException
{
String s = getString(columnIndex);
! SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:sszzz");
!
if (s != null)
{
! int TZ = new Float(s.substring(19)).intValue();
! TZ = TZ * 60 * 60 * 1000;
! TimeZone zone = TimeZone.getDefault();
! zone.setRawOffset(TZ);
! String nm = zone.getID();
! s = s.substring(0,18) + nm;
try {
java.util.Date d = df.parse(s);
return new Timestamp(d.getTime());
--- 448,477 ----
public Timestamp getTimestamp(int columnIndex) throws SQLException
{
String s = getString(columnIndex);
! SimpleDateFormat df;
if (s != null)
{
! int i = 19;
! if (s.charAt(i) == '.')
! {
! i++;
! while(Character.isDigit(s.charAt(i)))
! i++;
! df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSzzz");
! }
! else
! df = new SimpleDateFormat("yyyy-MM-dd HH:mm:sszzz");
!
! int TZ = new Float(s.substring(i)).intValue();
! String sign;
! if (TZ < 0)
! {
! sign = "-";
! TZ = -TZ;
! }
! else
! sign = "+";
! s = s.substring(0,i) + "GMT" + sign + TZ/10 + TZ%10 + ":00";
try {
java.util.Date d = df.parse(s);
return new Timestamp(d.getTime());
--
Aleksey Demakov
avd@gcom.ru
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-interfaces@postgresql.org
Cc: avd@gcom.ru, peter@retep.org.uk
Subject: Re: JDBC, Timestamps, and DateStyle
In-Reply-To: <87ww5mrznf.fsf@avd.garsib.ru>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox