сравнение двух времен больше или меньше в java
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 ответов:
Вам нужно использовать Date#before (дата),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.Как говорится в документах:
Значение 0, если дата аргумента равна этой дате; значение меньше чем 0, если эта дата находится перед Аргумент даты; и значение больше чем 0, если эта дата находится после аргумента Date.
В вашем случае вы получаете
-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"); }
Вам нужно разобрать дату и вызвать методы, такие как
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"); }
Современная версия:
Когда я прогнал этот код сегодня утром, он напечатал: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 statementDateиTimeлегко не получить все правильно. С современными классами, которые я использую здесь, гораздо прощеполучить их правильно.Вы используете типы
java.sql, потому что вам действительно нужно получить дату и время из базы данных и/или сохранить их в одну? Это было то, для чего они были предназначены, вы не должны действительно использовали их для других целей. Я использую" был "и" были " намеренно, потому что они вам больше не нужны для этой цели. С новым драйвером JDBC вы можете получитьLocalDateTimeиз базы данных и сохранить его обратно, или в зависимости от типа данных столбца получитьInstantи преобразовать его вLocalDateTime:LocalDateTime dateTime2 = instantFromDb.atZone(ZoneId.systemDefault()) .toLocalDateTime();PS пункт 2. в ответе Содурахула дается реальное и правильное объяснение того, что пошло не так в вашей программе: хотя
Timeпредназначалось только для времени суток, вашSqldob1заканчивается вплоть до сегодняшней даты иsqlTime3даты эпохи (1 января 1970 года), поэтому первые всегда будут после вторых по их методуbefore.
Comments