Date - Calender | "Vergleich"

  • Themenstarter Themenstarter Gelöschtes Mitglied 32268
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 32268

Gast
Hallo Leute 😉

Ich weiß nicht so recht, ob ich im "Beginner" Bereich richtig bin. Jedenfalls habe ich mir eine GUI erstellt mit Button etc.
Die Funktion des Programms wäre, dass ich in ein Textfeld ein Datum des Formates "dd.mm.yyyy" eingebe. (Vergangenes Datum)
Dieses Datum wird dann mit dem heutigen Datum verglichen. Die Ausgabe sollte dann in Form von "Vergangene Jahre, Monate, Tage, Stunden, Minuten, Sekunden" geschehen.
Dafür gibt es für jeden Punkt ein Textfeld.

Die GUI habe ich komplett und sieht wie folgt aus:

Wird der Button "Ausrechnen" betätigt, sollte das oben genannte geschehen.
Folgendes funktioniert bei mir:

Java:
public void buttonAuswert()
	{
		try{// Derzeitiges Datum (Jahr, Monat, etc..) abfragen
		Date heute = new Date(System.currentTimeMillis());
		String Eingabe = editorfeld_eingabe.getText();
		SimpleDateFormat Datum_eingabe = new SimpleDateFormat("dd.MM.yyyy");
		Date d = Datum_eingabe.parse(Eingabe);
		System.out.println("Vergleiche alt+neu: " + d.compareTo(heute));
		System.out.println("Datum heute:" + heute);
		System.out.println("Datum selbsteingabe " + d);
		
	}catch(Exception e){
		JOptionPane.showMessageDialog(null, "Es wurde nichts od. kein Datum im 'dd.MM.yyy' Format eingegeben!");
	}
	
	}
Soweit so gut. Ich bekomme das eingegebene Datum und das heutige.
Frage: Wie kann diese vergleichen, dass mir die Differenz angegeben wird?
(Noch schnell ein Beispiel: Eingabe 11.11.11 Heute 13.12.11: Jahr 0, Monat 1, Tag 2 und so weiter)

Schonmal vielen Dank für die Hilfe
MFG
Name
 
Zuletzt bearbeitet von einem Moderator:
Ist es nicht möglich, das Datum als Long (Datum in millisekunden) zu verwenden? *grübel*

Da ist der 31.12.1899 der Tag 0, und der 01.01.1900 tag 1.
Oder der 01.01.1900 ist Tag 0.
Also bei Datenbanken funktioniert das auf jeden Fall, bei Excel meines Wissens auch.


Ah ja, eben bei Google gesucht und das hier gefunden:
Java Blog Buch : D) Differenz zweier Daten
 
Super vielen Dank! 😉

Das klappt nun super, Tage, Stunden, Minuten, Sekunden. (;
Jedoch wenn ich es auf "Monate/Jahre" erweitern will kommt immer eine negative Zahl heraus. Hier die Rechnung:
Java:
	GregorianCalendar heute = new GregorianCalendar(); //heutiges Datum
		GregorianCalendar eingabe = new GregorianCalendar(2011, 10, 11); //Wird noch auf eine EditorFeld umgeschrieben
		System.out.println(eingabe); //nur Testweiße zum überprüfen
		long difference = heute.getTimeInMillis() - eingabe.getTimeInMillis(); //Differenz (:
		int years = (int) (difference / (1000 * 60 * 60 * 24 * 31 * 12 )); 
		int months = (int) (difference / (1000 * 60 * 60 * 24 * 31) % 12);
		int days = (int)(difference / (1000 * 60 * 60 * 24) % 31);
		int hours = (int)(difference / (1000 * 60 * 60) % 24);
		int minutes = (int)(difference / (1000 * 60) % 60);
		int seconds = (int)(difference / 1000 % 60);

Desweiteren habe ich noch keinen Plan wie ich "Schaltjahre" bzw. " 30/31 und den Februar mit 28" Jahre "simulieren" kann. (;

Vielen Dank für eure Hilfe.

MFG
Name
 
Zuletzt bearbeitet von einem Moderator:
Kann die Nachricht davor leider nicht mehr bearbeiten. Sorry for Doppelpost.

Habs jetzt jedenfalls gelöst und bin soweit zufrieden.
Lösung war im Prinzip total einfach mit Hilfe von "Joda" 😉
Joda-Time - Java date and time API - Home

Somit schaut das nun einfach so aus:
Java:
		// Eingabe in String speichern
		String Eingabe = editorfeld_eingabe.getText(); 
		//Datum Formatierung in das gewünschte Format. "AppendDayOfMonth(2)" 2 steht für 2 stellen. "appendYear(4, 4)" (apendYear(min, max)). appendLiteral('.') für character.
		DateTimeFormatter inputFormatter = new DateTimeFormatterBuilder().appendDayOfMonth(2).appendLiteral('.').appendMonthOfYear(2).appendLiteral('.').appendYear(4, 4).toFormatter();
		//Den String Eingabe in "DateTime" (Joda Date Format) parsen.
		DateTime d = inputFormatter.parseDateTime(Eingabe);
		
		//heutiges Datum abfragen
		DateTime heute = new DateTime();
		
		//Joda ;)
		Period p = new Period(d, heute);
		System.out.println(p);
		int years = p.getYears();
		int months = p.getMonths();
		int days = p.getDays();
		int hours = p.getHours();
		int minutes = p.getMinutes();
		int seconds = p.getSeconds();

Danke für die Hilfe
Name
 

Zurück
Oben