From c50bf0190f920308304fa09edbb31e2a44800dc5 Mon Sep 17 00:00:00 2001 From: Barry Lind Date: Mon, 24 Jun 2002 04:53:05 +0000 Subject: [PATCH] fixed bug reported by Wolfgang Winter w.winter@logitags.com where historic timestamps which do not have timezone info were being interpreted in local timezone instead of GMT. Also added a check to support timestamp vs. timestamptz in this code --- .../jdbc/org/postgresql/jdbc1/ResultSet.java | 18 ++++++++++---- .../jdbc/org/postgresql/jdbc2/Array.java | 2 +- .../jdbc/org/postgresql/jdbc2/ResultSet.java | 24 ++++++++++++------- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java b/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java index a7d0389d56..11b3e70a56 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java @@ -566,17 +566,25 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu } else { - df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + //if type is timestamptz then data is in GMT, else it is in local timezone + if (fields[columnIndex - 1].getPGType().equals("timestamptz")) { + sbuf.append(" GMT"); + df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z"); + } else { + df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + } } } else if (slen == 19) { // No tz or fractional second info. - // I'm not sure if it is - // possible to have a string in this format, as pg - // should give us tz qualified timestamps back, but it was - // in the old code, so I'm handling it for now. + // if type is timestamptz then data is in GMT, else it is in local timezone + if (fields[columnIndex - 1].getPGType().equals("timestamptz")) { + sbuf.append(" GMT"); + df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); + } else { df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } } else { diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java b/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java index 90b56eb92d..042a6f4069 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java @@ -172,7 +172,7 @@ public class Array implements java.sql.Array retVal = new Timestamp[ count ]; StringBuffer sbuf = null; for ( ; count > 0; count-- ) - ((java.sql.Timestamp[])retVal)[i++] = ResultSet.toTimestamp( arrayContents[(int)index++], rs ); + ((java.sql.Timestamp[])retVal)[i++] = ResultSet.toTimestamp( arrayContents[(int)index++], rs, getBaseTypeName() ); break; // Other datatypes not currently supported. If you are really using other types ask diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java b/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java index ce6daf69a9..e30849bbe6 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java @@ -401,7 +401,7 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu */ public Timestamp getTimestamp(int columnIndex) throws SQLException { - return toTimestamp( getString(columnIndex), this ); + return toTimestamp( getString(columnIndex), this, fields[columnIndex-1].getPGType() ); } /* @@ -1660,7 +1660,7 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu * * @throws SQLException if there is a problem parsing s. **/ - public static Timestamp toTimestamp(String s, ResultSet resultSet) + public static Timestamp toTimestamp(String s, ResultSet resultSet, String pgDataType) throws SQLException { if (s == null) @@ -1735,18 +1735,26 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu } else { - // Just found fractional seconds but no timezone. + // Just found fractional seconds but no timezone. + //If timestamptz then we use GMT, else local timezone + if (pgDataType.equals("timestamptz")) { + resultSet.sbuf.append(" GMT"); + df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z"); + } else { df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + } } } else if (slen == 19) { - // No tz or fractional second info. - // I'm not sure if it is - // possible to have a string in this format, as pg - // should give us tz qualified timestamps back, but it was - // in the old code, so I'm handling it for now. + // No tz or fractional second info. + //If timestamptz then we use GMT, else local timezone + if (pgDataType.equals("timestamptz")) { + resultSet.sbuf.append(" GMT"); + df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); + } else { df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } } else { -- 2.40.0