Обсуждение: setTimestamp(int, Timestamp, Calendar) ignoring time zone?

Поиск
Список
Период
Сортировка

setTimestamp(int, Timestamp, Calendar) ignoring time zone?

От
Ian Pilcher
Дата:
I am trying to use a Calendar parameter to setTimestamp.  From what I've
read, using a Calendar with a non-default time zone should change the
value that is written to my table:

> public static void main(String[] args) throws Exception
> {
>     System.out.println(
>         "System time zone is " + TimeZone.getDefault().getID());
>     Calendar c = Calendar.getInstance(
>         TimeZone.getTimeZone("America/Chicago"));
>     Class.forName(JDBC_DRIVER_CLASS);
>     Connection db =
>         DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWD);
>     Statement s = db.createStatement();
>     s.execute("DELETE FROM foo");
>     PreparedStatement ps =
>         db.prepareStatement("INSERT INTO foo (bar) VALUES (?)");
>     ps.setTimestamp(1, Timestamp.valueOf("2013-02-01 00:00:00"));
>     ps.execute();
>     ps.setTimestamp(1, Timestamp.valueOf("2013-02-01 00:00:00"), c);
>     ps.execute();
>     ResultSet rs = s.executeQuery("SELECT * FROM foo");
>     while (rs.next()) {
>     System.out.println(rs.getTimestamp(1));
>     }
>     db.close();
> }

The output from the program is:

> System time zone is America/New_York
> 2013-02-01 00:00:00.0
> 2013-02-01 00:00:00.0

Is this a bug/missing feature in the driver, or am I doing something
wrong?

Thanks!

--
========================================================================
Ian Pilcher                                         arequipeno@gmail.com
Sometimes there's nothing left to do but crash and burn...or die trying.
========================================================================

Re: setTimestamp(int, Timestamp, Calendar) ignoring time zone?

От
Dave Cramer
Дата:
Ian,

What is the underlying data type ? Timestamp with timezone or without ?

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On Sun, Feb 3, 2013 at 11:27 PM, Ian Pilcher <arequipeno@gmail.com> wrote:
I am trying to use a Calendar parameter to setTimestamp.  From what I've
read, using a Calendar with a non-default time zone should change the
value that is written to my table:

> public static void main(String[] args) throws Exception
> {
>     System.out.println(
>           "System time zone is " + TimeZone.getDefault().getID());
>     Calendar c = Calendar.getInstance(
>           TimeZone.getTimeZone("America/Chicago"));
>     Class.forName(JDBC_DRIVER_CLASS);
>     Connection db =
>           DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWD);
>     Statement s = db.createStatement();
>     s.execute("DELETE FROM foo");
>     PreparedStatement ps =
>           db.prepareStatement("INSERT INTO foo (bar) VALUES (?)");
>     ps.setTimestamp(1, Timestamp.valueOf("2013-02-01 00:00:00"));
>     ps.execute();
>     ps.setTimestamp(1, Timestamp.valueOf("2013-02-01 00:00:00"), c);
>     ps.execute();
>     ResultSet rs = s.executeQuery("SELECT * FROM foo");
>     while (rs.next()) {
>       System.out.println(rs.getTimestamp(1));
>     }
>     db.close();
> }

The output from the program is:

> System time zone is America/New_York
> 2013-02-01 00:00:00.0
> 2013-02-01 00:00:00.0

Is this a bug/missing feature in the driver, or am I doing something
wrong?

Thanks!

--
========================================================================
Ian Pilcher                                         arequipeno@gmail.com
Sometimes there's nothing left to do but crash and burn...or die trying.
========================================================================



--
Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-jdbc

Re: setTimestamp(int, Timestamp, Calendar) ignoring time zone?

От
Ian Pilcher
Дата:
On 02/04/2013 04:40 AM, Dave Cramer wrote:
> What is the underlying data type ? Timestamp with timezone or without ?

Dave -

The column type is timestamp *with* time zone.  Your question tends to
confirm what I suspected after re-re-re-reading various bits of Javadoc,
along with this:

  http://www.postgresql.org/message-id/4B2F2CED.10400@opencloud.com

I.e. when a java.sql.Timestamp is created from a long, it represents an
absolute point in time, so "taking into account a custom timezone"
doesn't make any sense.  I guess that it might makes sense when using a
timestamp without time zone, although, I'm getting a headache just
trying to think through how that might behave.

Thanks!

--
========================================================================
Ian Pilcher                                         arequipeno@gmail.com
Sometimes there's nothing left to do but crash and burn...or die trying.
========================================================================