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
答案 0 :(得分:10)
您需要使用Date#before(Date),Date#after(Date)和Date#equals(Date)方法进行基本日期比较。
<强> E.g:强>
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
,因为
new SimpleDateFormat("HHH:mm:ss");
错了。应该是新的SimpleDateFormat("HH:mm:ss");
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");
}
答案 1 :(得分: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 ");
}
如果date
和date1
都相同,则可以使用equals方法,
if(date.equals(date1)){
System.out.println(" date and date1 are equal");
}
答案 2 :(得分:0)
compareTo()
方法总是返回0表示相等和非零。
答案 3 :(得分:0)
现代版:
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
重点是:对于旧的和现在已久的过时类Date
和Time
,很容易 来使事情正确。使用我在这里使用的现代课程,正确地
您使用java.sql
类型是因为您确实需要从数据库获取日期和时间和/或将它们存储到一个数据库中吗?这就是这些,你不应该将它们用于其他目的。我故意使用“was”和“are”,因为你不再需要它们用于此目的。使用新的JDBC驱动程序,您可以从数据库中获取LocalDateTime
并将其存储回来,或者根据您的列数据类型获取Instant
并将其转换为LocalDateTime
:
LocalDateTime dateTime2 = instantFromDb.atZone(ZoneId.systemDefault())
.toLocalDateTime();
PS项目2. SoduRahul’s answer中提供了对您的计划中出现问题的真实和正确的解释:虽然Time
仅用于时间,但Sqldob1
结束持有今天的日期和sqlTime3
时代的日期(1970年1月1日),所以前者总是按照before
方法在后者之后。