Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8014274

java.sql.Timestamp: after(...) incorrect comparison in milliseconds

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P5 P5
    • None
    • 6
    • core-libs

      FULL PRODUCT VERSION :
      java version " 1.6.0_31 "
      Java(TM) SE Runtime Environment (build 1.6.0_31-b05)
      Java HotSpot(TM) Client VM (build 20.6-b01, mixed mode, sharing)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows XP [Version 5.1.2600]

      A DESCRIPTION OF THE PROBLEM :
       " after " method of java.sql.Timestamp returns wrong results, if timestamps differ only in milliseconds.


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      package timestampAfterDefect;

      import java.sql.Timestamp;
      import java.util.Date;

      public class CheckDateTimestamp {

      /**
       * @param args
       */
      public static void main(String[] args) {
      // TODO Auto-generated method stub
      long milisEarly = 1352301604100l;
      long milisLate = 1352301604600l;
      Date earlyDate;
      Date lateDate;
      Date earlyTimestamp;
      Date lateTimestamp;

      earlyDate = new Date(milisEarly);
      lateDate = new Date(milisLate);

      // 07 16:20:04 CET 2012

      earlyTimestamp = new Timestamp(milisEarly);
      lateTimestamp = new Timestamp(milisLate);

      System.out.println( " Operating System: " +System.getProperty( " os.name " )+ " - " +System.getProperty( " os.arch " ));
      System.out.println( " Java Version: " +System.getProperty( " java.vendor " )+ " - " +System.getProperty( " java.version " ));
      System.out.println( " ===================================================
       " );
      System.out.println( " earlyDate = " +earlyDate + " = " +earlyDate.getTime());
      System.out.println( " earlyTimestamp = " +earlyTimestamp + " = " +earlyTimestamp.getTime());
      System.out.println( " lateDate = " +lateDate + " = " +lateDate.getTime());
      System.out.println( " lateTimestamp = " +lateTimestamp + " = " +lateTimestamp.getTime());
      System.out.println( " lateDate.after(earlyDate) = " + lateDate.after(earlyDate));
      System.out.println( " lateTimestamp.after(earlyTimestamp) = " +lateTimestamp.after(earlyTimestamp));
      System.out.println( " lateTimestamp.after(earlyDate) = " +lateTimestamp.after(earlyDate));
      System.out.println( " lateDate.after(earlyTimestamp) = " +lateDate.after(earlyTimestamp));

      //Execution Results:
      //
      //Operating System: Windows XP - x86
      //Java Version: Sun Microsystems Inc. - 1.6.0_31
      //===================================================
      //
      //earlyDate = Wed Nov 07 16:20:04 CET 2012 = 1352301604100
      //earlyTimestamp = 2012-11-07 16:20:04.1 = 1352301604100
      //lateDate = Wed Nov 07 16:20:04 CET 2012 = 1352301604600
      //lateTimestamp = 2012-11-07 16:20:04.6 = 1352301604600
      //lateDate.after(earlyDate) = true
      //lateTimestamp.after(earlyTimestamp) = false
      //lateTimestamp.after(earlyDate) = false
      //lateDate.after(earlyTimestamp) = true


      }

      }
      ---------- END SOURCE ----------

      SUPPORT :
      YES

            lancea Lance Andersen
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: