Come faccio a confrontare le date tra Java e Java?
Esempio:
date1 è 22-02-2010
date2 è 07-04-2010
oggi
date3 è 25-12-2010
date3
è sempre maggiore di date1
e date2
è sempre oggi. Come posso verificare se la data odierna è compresa tra la data 1 e la data 3?
Date has before and after methods e possono essere confrontati l'uno con l'altro come segue:
if(todayDate.after(historyDate) && todayDate.before(futureDate)) {
// In between
}
Per un confronto inclusivo:
if(!historyDate.after(todayDate) && !futureDate.before(todayDate)) {
/* historyDate <= todayDate <= futureDate */
}
Potresti anche dare Joda-Time a go, ma nota che:
Joda-Time è la de facto libreria di data e ora standard per Java prima di Java SE 8. Agli utenti viene ora richiesto di migrare a Java.time ( JSR-310 ).
I back-ports sono disponibili per Java 6 e 7 così come per Android.
Utilizza compareTo :
date1.compareTo(date2);
Di seguito sono riportati i metodi più comuni per confrontare le date. Ma preferisco il primo
Approach-1: Uso di Date.before (), Date.after () e Date.equals ()
if(date1.after(date2)){
System.out.println("Date1 is after Date2");
}
if(date1.before(date2)){
System.out.println("Date1 is before Date2");
}
if(date1.equals(date2)){
System.out.println("Date1 is equal Date2");
}
Approach-2: Date.compareTo ()
if(date1.compareTo(date2)>0){
System.out.println("Date1 is after Date2");
}else if(date1.compareTo(date2)<0){
System.out.println("Date1 is before Date2");
}else{
System.out.println("Date1 is equal to Date2");
}
Approach-3: Calender.before (), Calender.after () e Calender.equals ()
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
if(cal1.after(cal2)){
System.out.println("Date1 is after Date2");
}
if(cal1.before(cal2)){
System.out.println("Date1 is before Date2");
}
if(cal1.equals(cal2)){
System.out.println("Date1 is equal Date2");
}
Confronta le due date:
Date today = new Date();
Date myDate = new Date(today.getYear(),today.getMonth()-1,today.getDay());
System.out.println("My Date is"+myDate);
System.out.println("Today Date is"+today);
if (today.compareTo(myDate)<0)
System.out.println("Today Date is Lesser than my Date");
else if (today.compareTo(myDate)>0)
System.out.println("Today Date is Greater than my date");
else
System.out.println("Both Dates are equal");
Questi metodi esistono in LocalDate
, LocalTime
, e LocalDateTime
classes.
Queste classi sono integrate in Java 8 e versioni successive. Gran parte della funzionalità Java.time è backportata su Java 6 e 7 in ThreeTen-Backport e ulteriormente adattata a Android in ThreeTenABP (vedi Come usare ... ).
Puoi usare Date.getTime()
che:
Restituisce il numero di millisecondi dal 1 gennaio 1970, 00:00:00 GMT rappresentato da questo oggetto Date.
Ciò significa che puoi confrontarli come i numeri:
if (date1.getTime() <= date.getTime() && date.getTime() <= date2.getTime()) {
/*
* date is between date1 and date2 (both inclusive)
*/
}
/*
* when date1 = 2015-01-01 and date2 = 2015-01-10 then
* returns true for:
* 2015-01-01
* 2015-01-01 00:00:01
* 2015-01-02
* 2015-01-10
* returns false for:
* 2014-12-31 23:59:59
* 2015-01-10 00:00:01
*
* if one or both dates are exclusive then change <= to <
*/
Utilizzare getTime () per ottenere il valore numerico della data e quindi eseguire il confronto utilizzando i valori restituiti.
Prova questo
public static boolean compareDates(String psDate1, String psDate2) throws ParseException{
SimpleDateFormat dateFormat = new SimpleDateFormat ("dd/MM/yyyy");
Date date1 = dateFormat.parse(psDate1);
Date date2 = dateFormat.parse(psDate2);
if(date2.after(date1)) {
return true;
} else {
return false;
}
}
Questo codice determina oggi è in una certa durata .. basato sul locale KOREA
Calendar cstart = Calendar.getInstance(Locale.KOREA);
cstart.clear();
cstart.set(startyear, startmonth, startday);
Calendar cend = Calendar.getInstance(Locale.KOREA);
cend.clear();
cend.set(endyear, endmonth, endday);
Calendar c = Calendar.getInstance(Locale.KOREA);
if(c.after(cstart) && c.before(cend)) {
// today is in startyear/startmonth/startday ~ endyear/endmonth/endday
}
Questo metodo ha funzionato per me:
public static String daysBetween(String day1, String day2) {
String daysBetween = "";
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date1 = myFormat.parse(day1);
Date date2 = myFormat.parse(day2);
long diff = date2.getTime() - date1.getTime();
daysBetween = ""+(TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
} catch (ParseException e) {
e.printStackTrace();
}
return daysBetween;
}