Предположим, что у меня есть две даты, подобные следующим.
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 неизменяем, поэтому нет установленных методов. Вместо этого этот метод возвращает новый экземпляр с измененным значением секунды или минуты.
И документы метода withMillis()
говорят.
Возвращает копию этой даты и времени с разными миллисами. Возвращаемый объект будет либо новым экземпляром, либо этим. Меняются только миллисекунды, хронология и часовой пояс сохраняются.
Сравнение дат путем полного игнорирования времени можно легко выполнить с помощью DateTimeComparator.getDateOnlyInstance()
примерно как показано ниже.
if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)==0){}
if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)<0){}
if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)>0){}
Как сравнить две даты, игнорируя конкретный момент в DateTime
(в данном случае секунды и миллисекунды)?