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 bin heute auf ein interessantes Problem mit dem SimpleDateFormater gestoßen.
Ich wollte einen String wie "Montag" , "Dienstag" usw mit SimpleDateFormat in ein Datum parsen, um so den Wochentag als Integer zu ermitteln.
Java:
Calendar c = Calendar.getInstance();
/* Tag der Woche lang */
DateFormat df = new SimpleDateFormat("EEEE");
String test1 = "Dienstag";
c.setTime(df.parse(test1));
System.out.println(c.get(Calendar.DAY_OF_WEEK));
Erwartet Ausgabe sollte 3 sein...
Das geht auch wunderbar.
Wenn man nun für test1 keinen Wochentag nimmt sollte eine ParseException geworfen werden.
Nur nicht bei allen Wörtern... :-(
Wörter wie:
Montesori wird Montag
Diensthabender wird Dienstag
Frikadellle wird Freitag
Anscheinend parst der SimpleDateFormater nur die ersten 3 Buchstagen obwohl man ihm "EEEE" übergeben hat.
Ich habe zwar einen Workaround aber schön ist es nicht.
case 9: { // 'E' - DAY_OF_WEEK
// Want to be able to parse both short and long forms.
// Try count == 4 (DDDD) first:
int newStart = 0;
if ((newStart=matchString(text, start, Calendar.DAY_OF_WEEK,
formatData.weekdays)) > 0)
return newStart;
else // DDDD failed, now try DDD
if ((index = matchString(text, start, Calendar.DAY_OF_WEEK,
formatData.shortWeekdays)) > 0) {
return index;
} else {
origPos.errorIndex = pos.index;
return -1;
}
gefunden,
abgesehen von DDDD statt EEEE scheint es dort keine Möglichkeit zur Modifikation zu geben,
am ehesten machbar wäre vielleicht, eine neue Locale zu definieren damit shortWeekdays den gleichen Inhalt wie weekdays erhält,
scheint aber sehr kompliziert, mit Ressourcen, nativen Funktionen usw.
dann doch lieber manuell zusätzlich auf Vorhandensein der deutschen Wochentage prüfen
oder SimpleDateFormat und mindestens auch DateFormatSymbols neu schreiben, auf Kopie des Quelltext aufbauend
Calendar c = Calendar.getInstance();
/* Tag der Woche lang */
DateFormat df = new SimpleDateFormat("EEEE", Locale.GERMANY);
String test1 = "Dienstagabend";
final ParsePosition pos = new ParsePosition(0);
final Date date = (Date) df.parseObject(test1, pos);
if (pos.getIndex() == 0) {
throw new ParseException("Unparseable date: \"" + test1 + "\"", pos
.getErrorIndex());
} else if (pos.getIndex() != test1.length()) {
throw new ParseException("Unparseable date: \"" + test1 + "\"", pos
.getIndex());
}
c.setTime(date);
System.out.println(c.get(Calendar.DAY_OF_WEEK));