From: | matthias(dot)malsy(at)sme(dot)de |
---|---|
To: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | Daylight Safing Problem 2004-10-31 00:00:00 (UTC) |
Date: | 2005-02-14 15:49:09 |
Message-ID: | 22997.193.128.157.68.1108396149.squirrel@morpheus.sme.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
Dear pgjdbc users and developers,
hope you can help me fixing my daylight safing problem.
Thx in advance
Matthias
Description:
------------
I reduced my problem to a simple testcase just storing and loading a date
from the database. The tescase fails for the time interval of
2004-10-31 00:00:00 to 01:00:00 (UTC). In order to stay ANSI conform,
I use the 'timestamp [without timezone]' data type.
- create table mdso_demo (id int, d timestamp)
Scenario:
---------
I am storing sales data (containing sales date/time) in a database by
ignoring the timezone in order to make it comparable across multiple
timezones. The sales date is deliverd by a foreign system as a String
and is parsed by an UTC-SimpleDateFormatter. After safing and loading,
the date (and its milliseconds) differs by 1 hour.
Output (running on CET/CEST):
-----------------------------
-- Date parsed and stored (running on CET/CEST) -----------
Sun Oct 31 02:00:00 CEST 2004
1099180800000
31 Oct 2004 00:00:00 GMT
-- Date loaded from database
Sun Oct 31 02:00:00 CET 2004
1099184400000
31 Oct 2004 01:00:00 GMT
Environment:
------------
PG: PostgreSQL 7.4.6 on i686-pc-linux-gnu, compiled by GCC gcc (GCC)
3.3.4 (pre 3.3.5 20040809)
JDBC: pg74.215.jdbc3.jar
JAVA: java version "1.4.2_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_06-b03)
Java HotSpot(TM) Client VM (build 1.4.2_06-b03, mixed mode)
Database _and_ Client are running at CET/CEST.
The Code:
---------
public void testDaylightSavings3() throws Exception {
String database = "bkgrsta_dev";
String username ="mat";
String password = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
TimeZone tzGMT = TimeZone.getTimeZone("etc/UTC");
sdf.setTimeZone( tzGMT );
Date testDate = sdf.parse("2004-10-31 00:00:00");
System.out.println("---------------- A Date -----------");
System.out.println(testDate);
System.out.println(testDate.getTime());
System.out.println(testDate.toGMTString());
Class.forName("org.postgresql.Driver"); //load the driver
Connection db =
DriverManager.getConnection("jdbc:postgresql:"+database,
username,
password); //connect to the db
Statement sql = db.createStatement(); //create a statement that we
can use later
String sqlText = "create table mdso_demo (id int, d timestamp)";
sql.executeUpdate(sqlText);
Timestamp ts = new Timestamp(testDate.getTime());
System.out.println("---------------- Converted to a Timestamp
----------------");
System.out.println(ts);
System.out.println(ts.getTime());
System.out.println(ts.toGMTString());
sqlText = "insert into mdso_demo values (?,?)";
PreparedStatement ps = db.prepareStatement(sqlText);
ps.setInt(1,1);
ps.setTimestamp(2,ts);
ps.execute();
System.out.println("----------------- Date has been inserted into
the database ----------");
Statement st = db.createStatement();
ResultSet rs = st.executeQuery("select id, d from mdso_demo");
boolean b = rs.next();
Timestamp resTime = rs.getTimestamp(2);
System.out.println("--------------- Timestamp loaded from database
-----------");
System.out.println(resTime);
System.out.println(resTime.getTime());
System.out.println(resTime.toGMTString());
Date resDate = new Date(resTime.getTime());
System.out.println("--------------- Converted to a date
-----------------");
System.out.println(resDate);
System.out.println(resDate.getTime());
System.out.println(resDate.toGMTString());
long diff = resDate.getTime() - testDate.getTime();
System.out.println("----------- difference was
------------------------- ");
System.out.println("ms: "+ diff + " h:" + diff /(1000*60*60));
rs.close();
sqlText ="drop table mdso_demo";
sql.execute(sqlText);
db.close();
}
From | Date | Subject | |
---|---|---|---|
Next Message | Oliver Jowett | 2005-02-14 22:14:07 | Re: Daylight Safing Problem 2004-10-31 00:00:00 (UTC) |
Previous Message | Xavier Poinsard | 2005-02-14 09:55:18 | Re: Patch adding name for NotImplemented |