Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich möchte gerne ein Datum auf Korrektheit/Gültigkeit prüfen. Eingegeben wir das Datum in einer SWT Applikation über 3 Spinner Boxen.
Danach wollte ich mir einen String der Form dd.mm.yyyy zusammenbauen und diesen wie hier im Forum häufig als Lösung vorgeschlagen via DateFormat prüfen lassen:
Code:
StringBuffer input = new StringBuffer();
input.append(inputDate[0].getSelection());
input.append(".");
input.append(inputDate[1].getSelection());
input.append(".");
input.append(inputDate[2].getSelection());
DateFormat format = new SimpleDateFormat("dd.MM.yyyy");
boolean correct = true;
try {
format.parse(input.toString());
} catch (ParseException e1) {
correct = false;
}
RGB rgb = GuiRGB.WHITE;
if (!correct) {
rgb = GuiRGB.RED;
}
for (int i = 0; i < inputDate.length; i++) {
inputDate[i].setBackground(new Color(dialogShell.getDisplay(),red ));
}
Allerdings musste ich feststellen, das bei dieser Prüfung Daten, wie z.B: der 0.0.2006 oder 30.02.2006 ohne Exception geparst werden konnten?!
Lässt sich das den irgendwie über den DateFormater oder Calender bestimmten? Hab noch ein paar andere Versuche in Anlehnung an einige hier gepostete Varianten versucht aber bis jetzt nicht das gewünschte ergebnis erzielt.
Code:
String input = "50.12.2006";
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
boolean correct = true;
try {
GregorianCalendar c = new GregorianCalendar();
c.setTime(format.parse(input.toString()));
correct = c.isLenient();
} catch (ParseException e1) {
correct = false;
}
if (correct) {
System.out.println("kein Error");
} else {
System.out.println("Error ");
}
Öhm ... ich war mir eigentlich 100%ig sicher, dass das mit GregorianCalendar geht (hab sowas glaub ich auch schonmal gemacht). Aber jetzt wo ich suche ... kann irgendwie auch nix finden. Einziges was mir einfällt, wäre mit getActualMaximum was zu drehen.
Evtl. find ich noch was.
[edit]Hm, ich hab kA warum, aber wenn die Exception wird erst geworfen sobald du über get auf irgendein Feld zugreifst. ???:L :bahnhof:
Code:
GregorianCalendar cal = new GregorianCalendar(2006, 12, 40);
cal.setLenient(false);
cal.set(Calendar.DAY_OF_MONTH, 50);
System.out.println(cal.get(Calendar.DATE));
dann hab ich jetzt zumindest die funktionalität die ich will. Ist zwar etwas seltsam umgesetzt als ich es mir vorgestellt habe, aber naja zumindest gehts.
Hier nochmal die endgültige Fassung, für alle die mal was ähnliches suchen oder nen Verbesserungsvorschlag haben:
Code:
try {
Calendar cal = new GregorianCalendar();
cal.setLenient(false);
cal.set(Calendar.YEAR, inputDate[2].getSelection());
cal.set(Calendar.MONTH, inputDate[1].getSelection() - 1);
cal.set(Calendar.DAY_OF_MONTH, inputDate[0].getSelection());
cal.get(Calendar.DATE);
// Datum gültig
for (int i = 0; i < inputDate.length; i++) {
inputDate[i].setBackground(new Color(dialogShell
.getDisplay(), GuiRGB.WHITE));
}
} catch (IllegalArgumentException e1) {
// Datum ungültig
for (int i = 0; i < inputDate.length; i++) {
inputDate[i].setBackground(new Color(dialogShell
.getDisplay(), GuiRGB.RED));
}
}