Datum parsen

fsicher

Bekanntes Mitglied
Hallo allerseits

Ich muss eine Datumeingabe parsen können, wobei ich mindestens EN und DE Locale unterstützen muss. So könnte die Eingabe mehrere Formen haben:

  • 8/24/2011
  • 8/24/11
  • 24.8.2011
  • 24.8.11

Ich habe dies wie folgt abfangen versucht:

Java:
/* für zweistellige Jahr */
DateFormat df0 = new SimpleDateFormat(
	((SimpleDateFormat) DateFormat.getDateInstance(
		DateFormat.SHORT, Locale.getDefault())).toPattern());

/* für das vierstellige Jahr */
DateFormat df1 = new SimpleDateFormat(
	((SimpleDateFormat) DateFormat.getDateInstance(
		DateFormat.SHORT, Locale.getDefault())).toPattern()
		.replace("yy", "yyyy"));

Date d = null;

try {
		d = df0.parse(strDate);
} catch (ParseException e) {
		try {
	d = df1.parse(strDate);
		} catch (ParseException e1) {
	throw new Exception("Fehler beim Parsen des Datums: ["
		+ strDate + "]: ", e1);
		}
}

Calendar c = Calendar.getInstance();
c.setTime(d);

// ...

Das will aber nich so recht! Wenn ich als Eingabe

8/31/2011

habe, bekomme ich

1.10.2011

zu sehen. Offenbar wird 8 als September verstanden, und da September nur 30 Tage hat, wird daraus halt 1. Oktober gemacht.

Wie könnte man das machen, ohne dass man alles von Hand zerlegen und prüfen muss?

Danke.
 

VfL_Freak

Top Contributor
Moin,

ohne mich jetzt explizit mit Deinem Code beschäftigt zu haben, nur schnell der Hinweis, dass der Wert für "Monat" von 0 - 11 geht und nicht von 1 - 12 !

Von daher dürfte Deine Anahme richtig sein :)

Gruß
Klaus
 

Empire Phoenix

Top Contributor
Du kannst denn calendar erstmal den lenient mode umstellen,dann würde sowas zu fehlern führen.

Zwei einzelne parser nehmen, mit string.contains("/") differenzeiren welche der lokalen es ist, und dann den richtigen nehmen bzw abfragenw elche es ist alternativ wenn die Locale richtig gesetzt ist.
Pattern von and nehmen, also eigenen erstellen
new simpleDateFormat("dd.mm.yyyy") bzw new simpleDateFormat("mm/dd/yyyy")
 

fsicher

Bekanntes Mitglied
Danke.

Du kannst denn calendar erstmal den lenient mode umstellen,dann würde sowas zu fehlern führen.

Richtig. Aber, wenn ein Benutzer 31.8.2011 eingibt, bekomme ich einen Fehler (8 steht für September, September hat nur 30 Tage), der für den Benutzer nicht ersichtlich / nachvollziebar ist.

Mit Abfragen von "/" oder "." bin ich auch nicht so glücklich. Es könnte auch 8-31-2011 als Eingabe vorhanden sein (je nach Einstellung). Darum würde ich lieber mit Locale-Instanz arbeiten und auf von mir explizit definierten Patterns verzichten.

Ich kann natürlich nach dem Parsen alles noch eimal prüfen und evtl. zurückstellen, aber ich kann nicht das Gefühl los werden, dass ich den Rad neu erfinden würde! Das muss auch eleganter zu erledigen möglich sein.
 

VfL_Freak

Top Contributor
Moin,

Aber, wenn ein Benutzer 31.8.2011 eingibt, bekomme ich einen Fehler (8 steht für September, September hat nur 30 Tage), der für den Benutzer nicht ersichtlich / nachvollziebar ist.

Das musst Du halt in Deinen Routinen abfangen - sprich: Du musst in Deinem Datum vom eingegebenen Wert für den Monat (hier also 8) '1' abziehen, damit Du wirklich den August am Wickel hast :D

Gruß
Klaus
 

Michael...

Top Contributor
Das will aber nich so recht! Wenn ich als Eingabe

8/31/2011

habe, bekomme ich

1.10.2011

zu sehen.
Hab Deinen Code nicht wirklich angeschaut, bei mir wird jedesmal der 31. August 2011 ausgegeben:
Java:
   public static void main(String[] args) {
    	SimpleDateFormat sdf1 = new SimpleDateFormat("d.M.y");
    	SimpleDateFormat sdf2 = new SimpleDateFormat("M/d/y");
    	
    	String[] input =  {"8/31/2011", "8/31/11", "31.8.2011", "31.8.11"};
    	for (String in : input) {
	    	try {
				Date date = sdf1.parse(in);
				System.out.println(in + " --> " + date);
			} catch (ParseException e) {
				try {
					Date date = sdf2.parse(in);
					System.out.println(in + " --> " + date);
				} catch (ParseException e2) {
					System.out.println(in + " --> unable to parse");
					//e2.printStackTrace();
				}
			}
    	}
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Methoden Datum parsen Java Basics - Anfänger-Themen 16
S fehler beim datum parsen Java Basics - Anfänger-Themen 6
E Datentypen Unvollständiges Datum parsen Java Basics - Anfänger-Themen 8
F Datum AM / PM parsen Java Basics - Anfänger-Themen 5
A Datentypen Datum mit "May" zu Date parsen Java Basics - Anfänger-Themen 6
M Datum parsen Java Basics - Anfänger-Themen 10
D Datum parsen Java Basics - Anfänger-Themen 11
N Datum parsen Java Basics - Anfänger-Themen 3
C Darstellung von Datum - Codes richtig? Java Basics - Anfänger-Themen 2
L Datum - Monat und Jahr werden falsch angezeigt Java Basics - Anfänger-Themen 4
T Datum als Variable wert Java Basics - Anfänger-Themen 4
T Datum in die als Variabelwert Java Basics - Anfänger-Themen 5
B Beliebiger String gegeben Suche Datum in String Java Basics - Anfänger-Themen 6
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
berserkerdq2 Wie datum im default format speichern? Java Basics - Anfänger-Themen 5
W Methode, die mit einem Datum arbeitet? Java Basics - Anfänger-Themen 22
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
J Datum ermitteln ? Java Basics - Anfänger-Themen 14
KogoroMori21 Java Datum Differenz (kleiner Fehler) Java Basics - Anfänger-Themen 10
J JDatePicker: Datum wird nicht in Textfeld übernommen Java Basics - Anfänger-Themen 5
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
N Ein Datum berechnen Java Basics - Anfänger-Themen 3
T Datum und Uhrzeit Java Basics - Anfänger-Themen 4
B Liste von Tagen generieren ab einem bestimmten Datum und Endedatum Java Basics - Anfänger-Themen 4
B Datum in dieser Range SQL? Java Basics - Anfänger-Themen 3
F Ein Datum (int) durch Methode als String formatieren Java Basics - Anfänger-Themen 2
D Kontoauszüge von bestimmtem Datum Java Basics - Anfänger-Themen 35
B Termine (Datum erstellen), Abhängig von Intervallen Java Basics - Anfänger-Themen 0
A Nächstes Datum ausgeben, if-Schleife unklar Java Basics - Anfänger-Themen 6
J Best Practice Datum Differenz aus zwei Strings ermitteln Java Basics - Anfänger-Themen 8
Bluedaishi Datum in Jtextarea füllen Java Basics - Anfänger-Themen 5
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
S Datum umformatieren Java Basics - Anfänger-Themen 2
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
F LimitedQueue auf Datum prüfen Java Basics - Anfänger-Themen 6
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
D Projekte + Datum + löschen Java Basics - Anfänger-Themen 11
M Datum serialisieren Java Basics - Anfänger-Themen 1
S Datum einlesen Java Basics - Anfänger-Themen 1
D Aktuelles Datum wird falsch ausgegeben Java Basics - Anfänger-Themen 2
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
MiMa Jüngstes Datum ermitteln Java Basics - Anfänger-Themen 4
2 Uhrzeit und Datum aktualisieren Java Basics - Anfänger-Themen 12
R Problem beim Wochenplan (Datum,Wochentag) Java Basics - Anfänger-Themen 30
O Datum-Werte gruppieren Java Basics - Anfänger-Themen 6
J Java Datum- Zeit Differenz bilden! Java Basics - Anfänger-Themen 4
M Methoden Aus Timestamp das Datum berechnen Java Basics - Anfänger-Themen 3
B Kontoauszug mit Datum ausgeben Java Basics - Anfänger-Themen 4
M Datum in Millisekunden allerdings ohne Uhrzeit Java Basics - Anfänger-Themen 4
DeVolt Java8 Paket Time: Datum prüfen / try-catch Java Basics - Anfänger-Themen 1
T Datum mit einem Datums-Bereich vergleichen Java Basics - Anfänger-Themen 10
J Datum und Uhrzeit in Datenbank falsch hinterlegt Java Basics - Anfänger-Themen 13
L Aus Datum Millisekunden ermitteln ohne Zeitzonen-Berücksichtigung Java Basics - Anfänger-Themen 6
P Wieviele Tage seit dem Datum vergangen sind Java Basics - Anfänger-Themen 5
P Liste nach Datum sortieren Java Basics - Anfänger-Themen 7
B tageszahl in Datum umrechnen Java Basics - Anfänger-Themen 6
F Datum Differenz berechnen Java Basics - Anfänger-Themen 7
B String in Datum Java Basics - Anfänger-Themen 3
M CompareTo soll Datum sortieren Java Basics - Anfänger-Themen 2
K Daten (im Sinne von Datum) aus Webseiten extrahieren Java Basics - Anfänger-Themen 6
AssELAss String in Datum umwandeln Java Basics - Anfänger-Themen 4
I Datum und Uhrzeitpattern von Locale Java Basics - Anfänger-Themen 7
H Wie wandel ich ein Datum in eine Zeichenkette um mit StringBuffer? Java Basics - Anfänger-Themen 3
I Datum ohne GregorianCalendar und co. Java Basics - Anfänger-Themen 3
A Datum zwischen zwei Daten berechnen und in Tagen anzeigen Java Basics - Anfänger-Themen 4
N Datum abgleichen und Frage zum Layout Java Basics - Anfänger-Themen 3
D Wochentag für eingegebenes Datum bestimmen anhand von Formel Java Basics - Anfänger-Themen 2
E Zeit zum bestimmten Datum in millisekunden berechnen Java Basics - Anfänger-Themen 5
M Aktuelles Datum in MySQL speichern Java Basics - Anfänger-Themen 11
P Datum umwandeln Java Basics - Anfänger-Themen 5
A Datum formatieren Java Basics - Anfänger-Themen 6
K Samstag einer Woche anhand eines Datum Java Basics - Anfänger-Themen 3
J Mit Datum rechnen Java Basics - Anfänger-Themen 11
B Datum ändern? Java Basics - Anfänger-Themen 8
Tally Methoden BlueJ - Datum als Kalendertag int - tagImJahr Java Basics - Anfänger-Themen 6
K wie Datum in JTable anders anzeigen lassen Java Basics - Anfänger-Themen 2
B Differenz von 2 Datum Java Basics - Anfänger-Themen 8
MiMa String Datum ermitteln Java Basics - Anfänger-Themen 9
D Hilfe beim SDF Datum Ausgabe Java Basics - Anfänger-Themen 20
A Plausibles Datum Java Basics - Anfänger-Themen 21
A Aktuelles Datum einfügen.. Java Basics - Anfänger-Themen 4
K Datum und Uhrzeit als Date Objekt Java Basics - Anfänger-Themen 10
K Java Datum berechnen Java Basics - Anfänger-Themen 13
L Datum probleme Java Basics - Anfänger-Themen 6
S Schleife Datum Java Basics - Anfänger-Themen 11
S Datum ändern bzw. abziehen Java Basics - Anfänger-Themen 3
M String in Datum umwandeln mit SimpleDateFormat Java Basics - Anfänger-Themen 3
T Heutiges datum OHNE Calendar? Java Basics - Anfänger-Themen 9
K Wie Datum um einen Tag erhöhen? Java Basics - Anfänger-Themen 4
A Datum Prüfen Java Basics - Anfänger-Themen 3
B Wie aus einem Datum String eine Timestamp erzeugen Java Basics - Anfänger-Themen 6
E Datum und Uhrzeit von UTC in MET umrechnen Java Basics - Anfänger-Themen 6
E Methoden Datum , Uhrzeit, Nachricht in txt Datei schreiben Java Basics - Anfänger-Themen 3
E Eigene class datum Java Basics - Anfänger-Themen 2
A Datum formatieren Java Basics - Anfänger-Themen 8
E Algorithmen und Programmierung - Datum und Zeit ausgeben? Java Basics - Anfänger-Themen 8
M Datum aus einer Textdatei holen Java Basics - Anfänger-Themen 9
M Datum und Stunde als String ausgeben Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben