DatumChecker

Ineedhelp!

Mitglied
Hallo ich will ein Programm schreiben, bei dem man ein Datum eingibt und das Programm dann checkt ob das Datum richtig eingegeben wurde.
Ich dachte mir es gibt bestimmt eine Methode mit der man kontrollieren kann ob das Datum richtig oder falsch ist.

Beispiel:
Eingabe: 1112.2019
Ausgabe: Sie haben den Punkt zwischen Tag und Monat vergessen.

Das ist mein Ansatz:
Java:
  import javax.swing.*;
  public class DatumSyntaxChecker {
	  public static void main (String[] args) {
	 
	  String s1 = JOptionPane.showInputDialog("Das Datum eingeben: ");
	
	  String tag   = s1.substring(0,2);
	  String monat = s1.substring(3,5);
	  String jahr  = s1.substring(6,10);
	  
	}
}

Später ist zu beachten dass ein Monat nihct mehr als 31 tage hat, ein Jahr nur 12 Monate.

Java:
	  if (tag > 31) {
		  JOptionPane.showMessageDialog(null, "Error!!");
	  }

Ich code mit Eclipse. und die IDE sagt mir die If schleife ist falsch. Wie vergleiche ich Strings ?

Danke für die Hilfe schon mal im voraus!
 

eRaaaa

Top Contributor
Java:
	  if (tag > 31) {
		  JOptionPane.showMessageDialog(null, "Error!!");
	  }

Ich code mit Eclipse. und die IDE sagt mir die If schleife ist falsch. Wie vergleiche ich Strings ?

a) es gibt keine if-Schleifen
b) du probierst hier einen String mit dem >- Operator anzuwenden, das geht nicht. Verwandel den String in einen Integer:
Java:
if(Integer.parseInt(tag) > 31)
c) du könntest auch einfach z.B. SimpleDateFormat benutzen
Java:
	SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyy");
	String s1 = JOptionPane.showInputDialog("Das Datum eingeben: ");
	try {
	    df.parse(s1);
	} catch (ParseException e) {
	    System.out.println("ungültiges Datum!");
	}

Gruß
 

Ineedhelp!

Mitglied
DAnke eRaaaa!!

Es funktioniert.

Wie lang programmierst du schon? Du hast bist jetzt bei allen meinen Fragen eine funktionierende antwort geschreiben!!

Gruß
 
Zuletzt bearbeitet:
T

tester4mii

Gast
Guten Morgen!

Ich habe das Problem, dass ich nur folgendes eingeben kann: dd.mm.yyyy (mit zahlen natürlich).
Das ist ja auch richtig! dann mein Simple Date Format wurde ja so erstellt, dass es nur daten von dieser Formatierung annimmt.

Wenn jetzt aber einer z.B.: 1.12.2009 eingibt, dann bricht dass Programm ab ich will aber dass dann eine Fehlermeldung kommt.

Mein code:
Java:
if (s1.charAt(0) < '9' && s1.charAt(1) == '.') {
	    	System.out.println("Bei den Tagen 1-9 bitte 01 - 09 schreiben");
	    }

Ich hab versucht das Problem so zu lösen: aber es funzt nicht.


Danke
 
S

SlaterB

Gast
wieso < '9', was ist am 9.12.2009?
und was genau funktioniert nicht, wird das if nicht durchgeführt? prüfe doch die Ergebnisse der beiden if einzeln,

reicht es vielleicht, die Gesamtlänge von 10 zu testen?
 
T

tester4mii

Gast
Die if-Abfrage geht nicht.

Java:
package date;
import javax.swing.*;

import java.text.*;

public class Date {
	public static void main (String[] args) {
		int t;
		int m;
		int j;
		String s2;
		
		while (true) {
		SimpleDateFormat date = new SimpleDateFormat("dd.MM.yyyy");         // steht in der API
		String s1 = JOptionPane.showInputDialog("Bitte ein Datum eingeben: ");
		try {
		 date.parse(s1);                              					// parse = analysieren
			} 
		catch (Exception x) {
			
		 s2 = date.toString();   
		if (s1 != s2) {
			System.out.println("Ungültiges Datum!! (dd.mm.yyyy)");
		}  
		
		}
		
		    
	    
		String tag   = s1.substring(0,2);
	    String monat = s1.substring(3,5);
	    String jahr  = s1.substring(6,10);
		
	    t = Integer.parseInt(tag);
	    m = Integer.parseInt(monat);
	    j = Integer.parseInt(jahr);
	    
	    if (s1.charAt(0) < '1' && s1.charAt(1) != '0') {
	    	System.out.println("Bei den Tagen 1-9 bitte 01 - 09 schreiben");
	    }
	    
	    if (t > 31) {
	        System.out.println("Ein Monat hat nur 31 Tage!!");
	      }
	    if (m > 12) {
	        System.out.println("Ein Jahr hat nur 12 Monate!!");
	      }
        if (j < 0000 || j > 2100) {
            System.out.println("Nur Jahreszahlen von 0000 bis 2100 eingeben!!");
          }
	}
}

}

Ich hab ja ein SimpleDateFormat dd.mm.yyyy! wenn ich jetzt aber das datum: 1.12.2000 eingebe (Beispiel), dann bricht das Programm ab aber eigentlich sollte da die if-Abfrage durchlaufen.

Hoffe das war verständlicher.
 
T

tester4mii

Gast
Falscher code!!

Java:
package date;
import javax.swing.*;

import java.text.*;

public class Date {
	public static void main (String[] args) {
		int t;
		int m;
		int j;
		String s2;
		
		while (true) {
		SimpleDateFormat date = new SimpleDateFormat("dd.MM.yyyy");         // steht in der API
		String s1 = JOptionPane.showInputDialog("Bitte ein Datum eingeben: ");
		try {
		 date.parse(s1);                              					// parse = analysieren
			} 
		catch (Exception x) {
			
		 s2 = date.toString();   
		if (s1 != s2) {
			System.out.println("Ungültiges Datum!! (dd.mm.yyyy)");
		}  
		
		}
		
		    
	    
	    String tag   = s1.substring(0,2);
	    String monat = s1.substring(3,5);
	    String jahr  = s1.substring(6,10);
		
	    t = Integer.parseInt(tag);
	    m = Integer.parseInt(monat);
	    j = Integer.parseInt(jahr);
	    
	    if (s1.charAt(0) < '9' && s1.charAt(1) != '.') {
	    	System.out.println("Bei den Tagen 1-9 bitte 01 - 09 schreiben");
	    }
	    
	    if (t > 31) {
	        System.out.println("Ein Monat hat nur 31 Tage!!");
	      }
	    if (m > 12) {
	        System.out.println("Ein Jahr hat nur 12 Monate!!");
	      }
        if (j < 0000 || j > 2100) {
            System.out.println("Nur Jahreszahlen von 0000 bis 2100 eingeben!!");
          }
        JOptionPane.showMessageDialog(null, "Das eingegebene Datum entspricht der erwarteten Syntax.");

	}
}

}
 
S

SlaterB

Gast
> if (s1 != s2) {
> System.out.println("Ungültiges Datum!! (dd.mm.yyyy)");

zwei Strings immer mit equals vergleichen

edit:
date.toString();
wird auch nicht gerade dd.mm.yyyy liefern, gib den String aus

edit2:
date ist gar nichtmal ein Date (bei Exception wird eh keins da sein), sondern das DateFormat,
wird ja immer merkwürdiger

----

wenn es noch um das andere if geht: geht nicht gibts nicht,
fange nur mit der ersten Bedingung an, wenn die nicht erfüllt ist,
dann gib den ersten Buchstaben mit System.out.println() aus, schau dir an was da passiert
 

Oben