6
  Date date1= new java.util.Date();
                  java.sql.Date Sqldob = new java.sql.Date(date1.getTime());
                  System.out.println("date" +Sqldob);

                  Time Sqldob1 = new Time(date1.getTime());
                  System.out.println("User Time: " +Sqldob1);
                  String yourTime="09:30:00"; 

                  SimpleDateFormat ra = new SimpleDateFormat("HH:mm:ss");
                  Date yourDate = ra.parse(yourTime);
                  Time sqlTime3 = new Time(yourDate.getTime());
                  System.out.println("your time"+sqlTime3);

                  if(Sqldob1.before(sqlTime3)){
                     Sqldob1 = sqlTime3; 
                     System.out.println("inside loop");
                  }

在上面的代码中,我比较了两个时间变量是否相等,但它为所有类型的输入提供了相同的值 -1

4

4 回答 4

10

您需要使用Date#before(Date)Date#after(Date)Date#equals(Date)方法进行基本日期比较。

例如:

Date d1 = new Date();
Date d2 = new Date();

if(d1.after(d2)){
    // Do something
}

if(d1.before(d2)){
    // Do something
}

if(d1.equals(d2)){
    // Do something
}

您也可以使用Date#compareTo(Date)方法,但是您需要相应地解释该compareTo方法的输出。

正如文档所说:

如果参数 Date 等于此 Date,则值为 0;如果此 Date 在 Date 参数之前,则值小于 0;如果此 Date 在 Date 参数之后,则值大于 0。

在你的情况下,你得到-1因为

  1. new SimpleDateFormat("HHH:mm:ss");是错的。应该是新的SimpleDateFormat("HH:mm:ss");

  2. int compare= sqlTime3.compareTo(Sqldob1);这个 sqlTime3 只有时间。日期是您没有提到的纪元日期,因此,它总是会在new Date()今天之前

您的解决方案:-(希望这可以解决您的问题)

java.util.Date date1= new java.util.Date();

Time Sqldob1 = new Time(date1.getTime());
System.out.println("User Time: " +Sqldob1);

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 19); // Your hour
cal.set(Calendar.MINUTE, 30); // Your Mintue
cal.set(Calendar.SECOND, 00); // Your second

Time sqlTime3 = new Time(cal.getTime().getTime());
System.out.println("your time: "+sqlTime3);

if(Sqldob1.before(sqlTime3)){
   Sqldob1 = sqlTime3; 
   System.out.println("inside loop");
}
于 2013-09-27T08:31:29.450 回答
3

您需要解析日期并调用类似的方法before()after()并且equals() 像这样,

if(date.before(date1)){
    System.out.println(" date is before date1 ");
}
if(date.after(date1)){
    System.out.println(" date is after date1 ");
}

如果两者都相等,则可以使用 equals 方法datedate1

if(date.equals(date1)){
    System.out.println(" date and date1 are equal");
}
于 2013-09-27T08:31:32.070 回答
1

现代版:

    LocalDateTime dateTime1 = LocalDateTime.now(ZoneId.systemDefault());
    LocalDate dob = dateTime1.toLocalDate();
    System.out.println("date " + dob);

    LocalTime dob1 = dateTime1.toLocalTime();
    System.out.println("User Time: " + dob1);

    String yourTime = "09:30:00"; 
    LocalTime time3 = LocalTime.parse(yourTime);
    System.out.println("your time " + time3);

    if (dob1.isBefore(time3)) {
        dob1 = time3;
        System.out.println("inside if statement");
    }

今天早上我运行这段代码时,它打印了:

date 2017-07-07
User Time: 05:32:01.881
your time 09:30
inside if statement

关键是:对于旧的和现在已经过时的类DateTime很容易把事情做好。使用我在这里使用的现代类,更容易正确处理它们。

您是否使用java.sql类型是因为您确实需要从数据库中获取日期和时间和/或将它们存储到一个数据库中?这就是它们的用途,您不应该将它们用于其他目的。我故意使用“was”和“were”,因为您也不再需要它们来达到这个目的。使用新的 JDBC 驱动程序,您可以LocalDateTime从数据库中获取 a 并将其存储回来,或者根据您的列数据类型获取 anInstant并将其转换为LocalDateTime

    LocalDateTime dateTime2 = instantFromDb.atZone(ZoneId.systemDefault())
            .toLocalDateTime();

PS Item 2. 在SoduRahul 的回答中,对您的程序中出了什么问题给出了真实和正确的解释:虽然Time仅适用于一天中的时间,但您Sqldob1最终会持有今天的日期和sqlTime3时代的日期(1970 年 1 月 1 日) ,所以前者总是会以他们的before方法在后者之后。

于 2017-07-07T03:43:03.203 回答
0

compareTo()方法对于相等的日期总是返回零,对于不相等的日期总是返回非零。

于 2013-09-27T08:44:08.263 回答