Java Prüfen ob Datum mind. 1 Tag vor aktuellem Datum liegt

furryhamster

Lt. Commander
Registriert
Okt. 2008
Beiträge
1.101
Hi,

habe gerade schwierigkeiten 2 Datumswerte in Java zu vergleichen. Ich möchte eine Funktion schreiben, welche prüft, ob ein übergebenes Datum mindestens 1 Tag vor dem aktuellen Datum liegt.

Leider habe ich Schwierigkeiten ein SimpleDateFormat mit einem Date zu vergleichen. Um den Vergleichsoperator zu verwenden muss ich beim Date ja einfach datum.getDate() aufrufen. Beim SimpleDateFormat geht dies jedoch nicht.

Hier mal mein aktueller Standpunkt:
Code:
			//Prüfung ob das aktuelle Datum mindestens 1 Tag vor Buchungszeitraum
			SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy");
			
			df.setLenient(false);
			
			try {
				df.parse(datum);
			} catch (java.text.ParseException e) {
				return false;
			}	
			
			//Einen Tag vom aktuellen Datum abziehen
			Date aktuellesDatum = new Date();

			Calendar c = Calendar.getInstance();
			c.setTime(aktuellesDatum);
			c.roll(Calendar.DAY_OF_MONTH,  -1);

			aktuellesDatum = c.getTime();
			
			if (df <= aktuellesDatum.getTime()) {
				
			}

Gerne auch einfachere Lösungen :)
 
Kenne die Funktionen für JAVA nicht, aber eine Möglichkeit wäre die UNIX-Timestamp zu nutzen und Heute - (60*60*24) zu rechnen und zu vergleichen.

Alternativ musst du sie wohl zerlegen und mit wesentlich mehr Logik abgleichen (vermute ich). Die Java-Spezis werden wohl mehr dazu sagen können ;)
 
h3rbert schrieb:
Kenne die Funktionen für JAVA nicht, aber eine Möglichkeit wäre die UNIX-Timestamp zu nutzen und Heute - (60*60*24) zu rechnen und zu vergleichen.

Ich muss gestehen ich hab deine Lösung erst für ziemlich umständlich gehalten. Im nachhinein scheint es jedoch wirklich das einfachste zu sein.

So habe ich es jetzt gelöst. Beim Vergleich zu gestern erhalte ich jetzt um 12 Uhr, 36 Stunden Unterschied :)

Code:
String mydate = "18.08.2011";
		
		SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");
		Date datum = null;
		Date heute = new Date();
		
		datum = formatter.parse(mydate);

		System.out.println((heute.getTime()/1000 - datum.getTime()/1000) / 60 / 60);
 
der compiler macht das zwar i.d.r. sowieso aber wenn du weißt das du immer durch 1000 dann durch 60 und dann nochmal ducrch 60 teilen willst würde ich das einmal schnell selber ausrechnen und diese zahl in den quellcode schreiben, mit nem kommentar wie du drauf gekommen bist. manchesmal kann der compiler das nämlich nicht erkennen und das sind einfach unnötoige berechnungen ;)

oder einmal ganz am anfang ausrechnen lassen und in eine Variable schreiben.
 
da hast du natürlich recht das man das machen sollte. ich hab das jetzt wie folgt umgestellt:
Code:
System.out.println((heute.getTime() - datum.getTime()) /1000 / 60 / 60);
Da ich das ganze nur 1x mache ist das speichern des Ergebnisses der Teilung denke nicht nötig
 
Zurück
Oben