web-dev-qa-db-fra.com

Comment comparer deux dates au format String?

Quelle est la façon la plus simple de comparer deux dates au format String? J'aurais besoin de savoir si date1 vient après/avant date2.

String date1 = "2015-12-01";
String date2 = "2015-12-31";
9
Klausos Klausos

Pour une approche plus générique, vous pouvez les convertir en objets Date d'un format défini, puis utiliser les méthodes appropriées:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

Date date1 = format.parse(date1);
Date date2 = format.parse(date2);

if (date1.compareTo(date2) <= 0) {
    System.out.println("earlier");
}
10

Dans ce cas précis, vous pouvez simplement comparer les chaînes date1.compareTo(date2).

EDIT: Cependant, la bonne façon est d'utiliser SimpleDateFormat:

DateFormat f = new SimpleDateFormat("yyyy-mm-dd");
Date d1 = f.parse(date1, new ParsePosition(0));
Date d2 = f.parse(date2, new ParsePosition(0));

Et puis comparez les dates:

d1.compareTo(d2);

La comparaison renverra une valeur négative si d1 est avant d2 et positif si d1 est après d2.

4
Danil Gaponov

Avec JodaTime, simplement:

DateTime d1 = DateTime.parse(date1);
DateTime d2 = DateTime.parse(date2);

Assert.assertTrue(d1.isBefore(d2));
Assert.assertTrue(d2.isAfter(d1));
4
Atais

Je vous conseille de les convertir en objets Date.

String date1 = "2015-12-01";
String date2 = "2015-12-31";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.parse(date1).before(sdf.parse(date2)));

En les comparant comme:

if(date2 .compareTo(date1) > 0){
    System.out.println(" ---- ");
}

n'est pas une option idéale (date1 et date2 sont des chaînes) car elle perd sa flexibilité et peut entraîner son propre lot de problèmes.

3
i_am_zero

Vous pouvez simplement convertir votre chaîne en dates:

Date date1 = sdf.parse("2015-12-01");
Date date2 = sdf.parse("2010-01-01");

Ensuite, la comparaison se fait comme: if (date1.after (date2)) {System.out.println ("Date1 est après Date2"); }

if(date1.before(date2)){
            System.out.println("Date1 is before Date2");
}

if(date1.equals(date2)){
            System.out.println("Date1 is equal Date2");
}

Si je me souviens bien, il y a un ParseException à gérer

1
LBes

Oui, vous pouvez comparer cela comme suit:

Date date1 = new Date();
Date date2 = new Date();

if(date1.before(date2)){
    // statement
}

if(date1.after(date2)){
    // statement
}
0
Abhijit Kumbhar