Да приемем, че имам две дати като следните.
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
(секунди и милисекунди в този случай)?