web-dev-qa-db-fra.com

Comparaison de la date d'entrée utilisateur avec la date actuelle

Salut, j'essaie de comparer une date entrée par l'utilisateur (sous forme de chaîne) avec la date actuelle afin de savoir si la date est antérieure ou antérieure.

Mon code actuel est

String date;
Date newDate;
Date todayDate, myDate;     
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy");

while(true)
{
    Scanner s = new Scanner (System.in);
    date = s.nextLine();
    Calendar cal = Calendar.getInstance();
    try {
        // trying to parse current date here
        // newDate = dateFormatter.parse(cal.getTime().toString()); //throws exception

        // trying to parse inputted date here
        myDate = dateFormatter.parse(date); //no exception
    } catch (ParseException e) {
        e.printStackTrace(System.out);
    }

}

Im essayant d'obtenir à la fois la date d'entrée utilisateur et la date actuelle dans deux objets Date, afin que je puisse utiliser Date.compareTo () pour simplifier la comparaison des dates.

J'ai pu analyser la chaîne d'entrée utilisateur dans l'objet Date. Cependant, la date actuelle cal.getTime (). ToString () n'analyse pas l'objet Date car il s'agit d'une chaîne non valide.

Comment s'y prendre? Merci d'avance

8
kype

Vous pouvez obtenir le Date actuel avec:

todayDate = new Date();

EDIT: Puisque vous devez comparer les dates sans tenir compte de la composante horaire, je vous recommande de voir ceci: Comment comparer deux dates sans la partie temporelle?

Malgré la "mauvaise forme" de la seule réponse, je l'aime bien:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.format(date1).equals(sdf.format(date2));

Dans votre cas, vous avez déjà:

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

donc je considérerais (pour plus de simplicité que de performance):

todayDate = dateFormatter.parse(dateFormatter.format(new Date() ));
8
rolfl

Voici le code pour vérifier si la date-heure donnée est plus grande que la méthode Present Date-time.Below prend la chaîne de date-heure pertinente comme argument et renvoie true si fourni la date-heure est plus grande que la date-heure actuelle . #thmharsh

private boolean isExpire(String date){
    if(date.isEmpty() || date.trim().equals("")){
        return false;
    }else{
            SimpleDateFormat sdf =  new SimpleDateFormat("MMM-dd-yyyy hh:mm:ss a"); // Jan-20-2015 1:30:55 PM
               Date d=null;
               Date d1=null;
            String today=   getToday("MMM-dd-yyyy hh:mm:ss a");
            try {
                //System.out.println("expdate>> "+date);
                //System.out.println("today>> "+today+"\n\n");
                d = sdf.parse(date);
                d1 = sdf.parse(today);
                if(d1.compareTo(d) <0){// not expired
                    return false;
                }else if(d.compareTo(d1)==0){// both date are same
                            if(d.getTime() < d1.getTime()){// not expired
                                return false;
                            }else if(d.getTime() == d1.getTime()){//expired
                                return true;
                            }else{//expired
                                return true;
                            }
                }else{//expired
                    return true;
                }
            } catch (ParseException e) {
                e.printStackTrace();                    
                return false;
            }
    }
}


  public static String getToday(String format){
     Date date = new Date();
     return new SimpleDateFormat(format).format(date);
 }
3
ThmHarsh
 public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.

for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren()){

SimpleDateFormat sdf1234 = new SimpleDateFormat("dd-MM-yyyy hh:mm a");
                    String abs12 = value.getExpiryData();

                    Date todayDate = new Date();

                    try {
                        Date testDate1 = sdf1234.parse(abs12);

                        if(testDate1.compareTo(todayDate) <0){//  expired
                            dataSnapshot1.getRef().removeValue();
                        }
                        else if(testDate1.compareTo(todayDate)==0){// both date are same
                            if(testDate1.getTime() == todayDate.getTime() || testDate1.getTime() < todayDate.getTime())
                            {//  expired
                                dataSnapshot1.getRef().removeValue();
                            }
                            else
                                {//expired
                                //Toast.makeText(getApplicationContext(),"Successful praju ",Toast.LENGTH_SHORT).show();
                            }
                        }else{//expired
                           // Toast.makeText(getApplicationContext(),"Successful praju ",Toast.LENGTH_SHORT).show();
                        }
 } }
2
Prajwal W

Tu peux le faire.

// Make a Calendar whose DATE part is some time yesterday.
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.DATE, -1);

if (myDate.before(cal.getTime())) {
    //  myDate must be yesterday or earlier
} else {
    //  myDate must be today or later
}

Peu importe que cal ait une composante temporelle, car myDate n'en a pas. Ainsi, lorsque vous les comparez, si cal et myDate sont à la même date, le composant time fera cal plus tard que myDate, quelle que soit l'heure composant est.

2

La création d'une nouvelle date () vous donnera un objet Date avec la date actuelle.

donc:

    Date currentDate = new Date();

fera le travail

1
Gigalala

Fomat ne se conforme pas comme prévu.

 Calendar cal = Calendar.getInstance();
      System.out.println(cal.getTime().toString());

sortie: ven nov 01 13:46:52 EET 2013

0
Ahmet Karakaya