1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

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

This commit is contained in:
Barry Lind
2002-06-24 04:53:05 +00:00
parent 68913b0fbb
commit c50bf0190f
3 changed files with 30 additions and 14 deletions

View File

@ -566,17 +566,25 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
} }
else 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) else if (slen == 19)
{ {
// No tz or fractional second info. // No tz or fractional second info.
// I'm not sure if it is // if type is timestamptz then data is in GMT, else it is in local timezone
// possible to have a string in this format, as pg if (fields[columnIndex - 1].getPGType().equals("timestamptz")) {
// should give us tz qualified timestamps back, but it was sbuf.append(" GMT");
// in the old code, so I'm handling it for now. df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
} else {
df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
} }
else else
{ {

View File

@ -172,7 +172,7 @@ public class Array implements java.sql.Array
retVal = new Timestamp[ count ]; retVal = new Timestamp[ count ];
StringBuffer sbuf = null; StringBuffer sbuf = null;
for ( ; count > 0; count-- ) 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; break;
// Other datatypes not currently supported. If you are really using other types ask // Other datatypes not currently supported. If you are really using other types ask

View File

@ -401,7 +401,7 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
*/ */
public Timestamp getTimestamp(int columnIndex) throws SQLException 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. * @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 throws SQLException
{ {
if (s == null) if (s == null)
@ -1735,18 +1735,26 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
} }
else 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"); df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
}
} }
} }
else if (slen == 19) else if (slen == 19)
{ {
// No tz or fractional second info. // No tz or fractional second info.
// I'm not sure if it is //If timestamptz then we use GMT, else local timezone
// possible to have a string in this format, as pg if (pgDataType.equals("timestamptz")) {
// should give us tz qualified timestamps back, but it was resultSet.sbuf.append(" GMT");
// in the old code, so I'm handling it for now. df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
} else {
df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
} }
else else
{ {