risposta-alla-domanda-sullo-sviluppo-web-bd.com

Come confrontare le date in Java?

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?

355
ant

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.

551
Bart Kiers

Utilizza compareTo :

date1.compareTo(date2);

120
Chandra Sekar S

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");
            }
87

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"); 
20
sam

Aggiornamento per Java 8 e versioni successive

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 ... ).

15
gstackoverflow

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 <
 */
11
Salman A

Utilizzare getTime () per ottenere il valore numerico della data e quindi eseguire il confronto utilizzando i valori restituiti.

5
Everyone

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;
        }
    }
4
Garambe

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
    }
0
Brownsoo Han

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;
}
0
Iman Marashi