web-dev-qa-db-fra.com

Comment comparer deux dates de chaîne en Java?

J'ai deux dates au format String comme ci-dessous - 

String startDate = "2014/09/12 00:00";

String endDate = "2014/09/13 00:00";

Je veux m'assurer que startDate devrait être inférieur à endDate. startDate ne doit pas être supérieur à endDate.

Comment puis-je comparer ces deux dates et renvoyer booléen en conséquence?

6
john

Convertissez-les en un objet Date réel, puis appelez before.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd h:m");
System.out.println(sdf.parse(startDate).before(sdf.parse(endDate)));

Rappelez-vous que parse lancera une ParseException; vous devez donc l'attraper dans ce bloc de code ou le déclarer comme faisant partie de votre signature de méthode.

28
Makoto

Voici une démo entièrement fonctionnelle. Pour le formatage de la date, consultez - http://docs.Oracle.com/javase/6/docs/api/Java/text/SimpleDateFormat.html

import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.util.Date;
import Java.util.Locale;

public class Dating {

    public static void main(String[] args) {

        String startDate = "2014/09/12 00:00";
        String endDate = "2014/09/13 00:00";

        try {
            Date start = new SimpleDateFormat("yyyy/MM/dd HH:mm", Locale.ENGLISH)
                    .parse(startDate);
            Date end = new SimpleDateFormat("yyyy/MM/dd HH:mm", Locale.ENGLISH)
                    .parse(endDate);

            System.out.println(start);
            System.out.println(end);

            if (start.compareTo(end) > 0) {
                System.out.println("start is after end");
            } else if (start.compareTo(end) < 0) {
                System.out.println("start is before end");
            } else if (start.compareTo(end) == 0) {
                System.out.println("start is equal to end");
            } else {
                System.out.println("Something weird happened...");
            }

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}
8
sid smith

Utilisez SimpleDateFormat pour convertir en Date et comparer:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
Date start = sdf.parse(startDate);
Date end = sdf.parse(endDate);
System.out.println(start.before(end));
3
Jean Logeart

Le moyen le plus simple et le plus sûr serait probablement d’analyser ces deux chaînes en tant que dates et de les comparer. Vous pouvez convertir une date à l'aide d'un SimpleDateFormat. Utilisez la méthode before ou after sur l'objet date pour les comparer.

2
Kenny Hung

Je pense que cela pourrait être fait beaucoup plus simplement,

Utiliser Joda Time

Vous pouvez essayer d’analyser ces dates simplement:

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy/MM/dd HH:mm");
DateTime d1 = formatter.parseDateTime(startDate);
DateTime d2 = formatter.parseDateTime(endDate);

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

classe publique DateComparision {

public static void main(String args[]) throws AssertionError, ParseException
{

    DateFormat df = new SimpleDateFormat("dd-MM-yyyy");

    //comparing date using compareTo method in Java
    System.out.println("Comparing two Date in Java using CompareTo method");

    compareDatesByCompareTo(df, df.parse("01-01-2012"), df.parse("01-01-2012"));
    compareDatesByCompareTo(df, df.parse("02-03-2012"), df.parse("04-05-2012"));
    compareDatesByCompareTo(df, df.parse("02-03-2012"), df.parse("01-02-2012"));

    //comparing dates in Java using Date.before, Date.after and Date.equals
    System.out.println("Comparing two Date in Java using Date's before, after and equals method");

    compareDatesByDateMethods(df, df.parse("01-01-2012"), df.parse("01-01-2012"));
    compareDatesByDateMethods(df, df.parse("02-03-2012"), df.parse("04-05-2012"));
    compareDatesByDateMethods(df, df.parse("02-03-2012"), df.parse("01-02-2012"));

    //comparing dates in Java using Calendar.before(), Calendar.after and Calendar.equals()

    System.out.println("Comparing two Date in Java using Calendar's before, after and equals method");
    compareDatesByCalendarMethods(df, df.parse("01-01-2012"), df.parse("01-01-2012"));
    compareDatesByCalendarMethods(df, df.parse("02-03-2012"), df.parse("04-05-2012"));
    compareDatesByCalendarMethods(df, df.parse("02-03-2012"), df.parse("01-02-2012"));

}

public static void compareDatesByCompareTo(DateFormat df, Date oldDate, Date newDate)
{
    //how to check if date1 is equal to date2
    if (oldDate.compareTo(newDate) == 0)
    {
        System.out.println(df.format(oldDate) + " and " + df.format(newDate) + " are equal to each other");
    }

    //checking if date1 is less than date 2
    if (oldDate.compareTo(newDate) < 0)
    {
        System.out.println(df.format(oldDate) + " is less than " + df.format(newDate));
    }

    //how to check if date1 is greater than date2 in Java
    if (oldDate.compareTo(newDate) > 0)
    {
        System.out.println(df.format(oldDate) + " is greater than " + df.format(newDate));
    }
}

public static void compareDatesByDateMethods(DateFormat df, Date oldDate, Date newDate)
{
    //how to check if two dates are equals in Java
    if (oldDate.equals(newDate))
    {
        System.out.println(df.format(oldDate) + " and " + df.format(newDate) + " are equal to each other");
    }

    //checking if date1 comes before date2
    if (oldDate.before(newDate))
    {
        System.out.println(df.format(oldDate) + " comes before " + df.format(newDate));
    }

    //checking if date1 comes after date2
    if (oldDate.after(newDate))
    {
        System.out.println(df.format(oldDate) + " comes after " + df.format(newDate));
    }
}

public static void compareDatesByCalendarMethods(DateFormat df, Date oldDate, Date newDate)
{

    //creating calendar instances for date comparision
    Calendar oldCal = Calendar.getInstance();
    Calendar newCal = Calendar.getInstance();

    oldCal.setTime(oldDate);
    newCal.setTime(newDate);

    //how to check if two dates are equals in Java using Calendar
    if (oldCal.equals(newCal))
    {
        System.out.println(df.format(oldDate) + " and " + df.format(newDate) + " are equal to each other");
    }

    //how to check if one date comes before another using Calendar
    if (oldCal.before(newCal))
    {
        System.out.println(df.format(oldDate) + " comes before " + df.format(newDate));
    }

    //how to check if one date comes after another using Calendar
    if (oldCal.after(newCal))
    {
        System.out.println(df.format(oldDate) + " comes after " + df.format(newDate));
    }
}

}

SORTIE:......

Comparer deux Date en Java à l'aide de la méthode CompareTo 01-01-2012 et 01-01-2012 sont égaux 02-03-2012 est inférieur à 04-05-2012 02-03- 2012 est supérieur au 01-02-2012

Comparaison de deux Date en Java à l'aide de la méthode de Date avant, après et de la valeur égale 01-01-2012 et 01-01-2012 sont égaux 02-03-2012 vient du 04/05/2012. 02-03-2012 vient après 01-02-2012

Comparaison de deux Date en Java en utilisant la méthode avant, après et la méthode égale de Calendar 01-01-2012 et 01-01-2012 sont égaux 02-03-2012 vient avant 04-05-2012 02-03-2012 vient après 01-02-2012

0
Creditto

Utilisez SimpleDateFormat pour analyser votre représentation de chaîne dans une instance de Date. Invoke getTime() pour obtenir des millisecondes. Comparez ensuite les millisecondes.

0
AlexR