Предположим, что у меня есть две даты, такие как следующее.Сравнение дат, игнорирующих секунды и миллисекунды момента DateTime в Joda
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd-MMM-yyyy HH:mm:ss").withZone(DateTimeZone.forID("Asia/Kolkata"));
DateTime firstDate = formatter.parseDateTime("16-Feb-2012 12:03:45");
DateTime secondDate = formatter.parseDateTime("17-Feb-2013 12:03:45");
Я хочу, чтобы сравнить эти две даты, чтобы увидеть ли firstDate
это раньше, позже или равно secondDate
.
Я мог бы попробовать следующее.
System.out.println("firstDate = "+firstDate+"\nsecondDate = "+secondDate+"\ncomparison = "+firstDate.isBefore(secondDate));
System.out.println("firstDate = "+firstDate+"\nsecondDate = "+secondDate+"\ncomparison = "+firstDate.isAfter(secondDate));
System.out.println("firstDate = "+firstDate+"\nsecondDate = "+secondDate+"\ncomparison = "+firstDate.equals(secondDate));
Что производится по этому коду, именно то, что я хочу.
Он производит следующий выход.
firstDate = 2012-02-16T12:03:45.000+05:30
secondDate = 2013-02-17T12:03:45.000+05:30
comparison = true
firstDate = 2012-02-16T12:03:45.000+05:30
secondDate = 2013-02-17T12:03:45.000+05:30
comparison = false
firstDate = 2012-02-16T12:03:45.000+05:30
secondDate = 2013-02-17T12:03:45.000+05:30
comparison = false
мне нужно игнорировать секунды и часть миллисекунды этих дат. Я попытался использовать методы withSecondOfMinute(0)
и withMillis(0)
следующим образом.
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd-MMM-yyyy HH:mm:ss").withZone(DateTimeZone.forID("Asia/Kolkata"));
DateTime firstDate = formatter.parseDateTime("16-Feb-2012 12:03:45").withSecondOfMinute(0).withMillis(0);
DateTime secondDate = formatter.parseDateTime("17-Feb-2013 12:03:45").withSecondOfMinute(0).withMillis(0);
Но он дал следующий выход.
firstDate = 1970-01-01T05:30:00.000+05:30
secondDate = 1970-01-01T05:30:00.000+05:30
comparison = false
firstDate = 1970-01-01T05:30:00.000+05:30
secondDate = 1970-01-01T05:30:00.000+05:30
comparison = false
firstDate = 1970-01-01T05:30:00.000+05:30
secondDate = 1970-01-01T05:30:00.000+05:30
comparison = true
Документы метода withSecondOfMinute()
.
Возвращает копию этого datetime со вторым минутным полем обновлено. DateTime неизменен, поэтому нет установленных методов. Вместо этого этот метод возвращает новый экземпляр со значением секунды минуты изменен.
И в документах метода withMillis()
говорится.
Возвращает копию этого datetime с разными миллисами. Возвращаемый объект будет либо новым, либо новым. Изменятся только миллины , хронология и часовой пояс сохранены.
Сравнивая даты, игнорируя часть времени полностью, можно легко сделать, используя DateTimeComparator.getDateOnlyInstance()
примерно следующим образом.
if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)==0){}
if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)<0){}
if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)>0){}
Как сравнить две даты не обращая внимания на конкретный момент времени в DateTime
(секундах и миллисекундах в данном случае)?
спасибо. Готово! – Tiny
@ Tiny. Добро пожаловать :) –