Hi,
You get the same behavior if you do:
TimeZone.setDefault(TimeZone.getTimeZone("EET"));
Timestamp d = new Timestamp(1351382400000L);
System.out.println(d + " " + d.getTime());
Timestamp d2 = Timestamp.valueOf(d.toString());
System.out.println(d2 + " " + d2.getTime());
System.out.println("difference " + (d.getTime() - d2.getTime()));
2012-10-28 03:00:00.0 1351382400000
2012-10-28 03:00:00.0 1351386000000
difference -3600000
So I don't consider this a bug of H2. You could call it a bug of the Java
date / time processing, or at least unexpected behavior.
With H2, if you _don't_ use java.sql.Timestamp, but instead use String
(even with "timestamp" data types), then you will not see this behavior.
Regards,
Thomas
On Friday, November 28, 2014, Rob Bygrave <[email protected]> wrote:
> Hi,
>
> So I have a test that is now failing when upgrading from 1.3.153
> to 1.4.182
>
> The test code is:
>
>
> @Test
> public void testDirect() throws SQLException {
>
> // For it to fail, the time has to match the time at which the
> daylight saving changes
> // are applied in that time zone. Therefore specify it explicitly.
>
> // Get a connection ...
> EbeanServer server = Ebean.getServer(null);
> Transaction transaction = server.createTransaction();
> Connection connection = transaction.getConnection();
>
> PreparedStatement pstmt = connection.prepareStatement("create table
> dls_test (id bigint auto_increment not null, myts timestamp)");
> pstmt.execute();
> pstmt.close();
>
> TimeZone defaultTimeZone = TimeZone.getDefault();
> try {
>
> TimeZone.setDefault(TimeZone.getTimeZone("EET"));
>
> // Run the code and see how there is a 3600 second change
> Timestamp daylightSavingDate = new Timestamp(1351382400000l);
> // On a second run comment in the following date and see
> // how there is a 0 second change
> // daylightSavingDate = new Date(1361382400000l);
>
> pstmt = connection.prepareStatement("insert into dls_test (myts)
> values (?)");
> pstmt.setTimestamp(1, daylightSavingDate);
> assertEquals(1, pstmt.executeUpdate());
> pstmt.close();
>
> pstmt = connection.prepareStatement("select myts from dls_test ");
> ResultSet rset = pstmt.executeQuery();
> rset.next();
> Timestamp timestampBack = rset.getTimestamp(1);
> pstmt.close();
> rset.close();
>
>
> long diffMillis = daylightSavingDate.getTime() -
> timestampBack.getTime();
>
> System.out.println(" --- the date i put in : " +
> daylightSavingDate);
> System.out.println(" as millis : " +
> daylightSavingDate.getTime());
> System.out.println(" --- the date i get back : " + timestampBack);
> System.out.println(" as millis : " +
> timestampBack.getTime());
> System.out.println("The difference is " + diffMillis / 1000 + "
> seconds");
>
> assertEquals(0L, diffMillis);
>
> } finally {
> TimeZone.setDefault(defaultTimeZone);
> }
>
> }
>
>
>
> Using version 1.3.153 the test passes and the output is:
>
> --- the date i put in : 2012-10-28 03:00:00.0
> as millis : 1351382400000
> --- the date i get back : 2012-10-28 03:00:00.0
> as millis : 1351382400000
> The difference is 0 seconds
>
>
>
> Using version 1.4.182 the test fails and the output is:
>
>
> --- the date i put in : 2012-10-28 03:00:00.0
> as millis : 1351382400000
> --- the date i get back : 2012-10-28 03:00:00.0
> as millis : 1351386000000
> The difference is -3600 seconds
>
> java.lang.AssertionError:
> Expected :0
> Actual :-3600000
> <Click to see difference>
> at org.junit.Assert.fail(Assert.java:88)
> at org.junit.Assert.failNotEquals(Assert.java:743)
> at org.junit.Assert.assertEquals(Assert.java:118)
> at org.junit.Assert.assertEquals(Assert.java:555)
> at org.junit.Assert.assertEquals(Assert.java:542)
> at
> com.avaje.tests.insert.TestSaveWithDaylightSavings.testDirect(TestSaveWithDaylightSavings.java:110)
> ...
>
>
> Is the test valid or perhaps there is some bug introduced?
>
>
> Thanks, Rob.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "H2 Database" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected]
> <javascript:_e(%7B%7D,'cvml','h2-database%[email protected]');>
> .
> To post to this group, send email to [email protected]
> <javascript:_e(%7B%7D,'cvml','[email protected]');>.
> Visit this group at http://groups.google.com/group/h2-database.
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.