I have the following (somewhat abbreviated) code to parse Stringinput to a Joda Time object DateTime. I need to handle several formats correctly, including four and two years.
setupValidDateFormats();
DateTime date = convertToDateTime(thisField.getText());
if (date != null) {
thisField.setText(date.toString("MM/dd/yyyy"));
} else {
System.out.println("Invalid date");
}
private void setupValidDateFormats() {
DateTimeParser[] formats = {
DateTimeFormat.forPattern("MM/dd/yyyy").getParser(),
DateTimeFormat.forPattern("MM/dd/yy").getParser(),
DateTimeFormat.forPattern("MM-dd-yyyy").getParser(),
DateTimeFormat.forPattern("MM-dd-yy").getParser(),
DateTimeFormat.forPattern("MMddyyyy").getParser(),
DateTimeFormat.forPattern("MMddyy").getParser()
};
formatter = new DateTimeFormatterBuilder().append(null, formats).appendTwoDigitYear(1950, true).toFormatter()
.withLocale(Locale.US);
}
private DateTime convertToDateTime(String input) {
if (isNullOrEmpty(input)) {
return null;
}
DateTime date;
try {
date = formatter.parseDateTime(input);
} catch (Exception e) {
date = null;
}
return date;
}
The problem I am facing is that when the user types in 120100, I expect him to be able to parse correctly and eventually output to 12/01/1900. However, formatter.parseDateTime(input);in convertToDateTimeinstead it IllegalArgumentExceptionreturns, and the method returns null.
It may be worth noting that if I remove appendTwoDigitYearfrom DateTimeFormatterBuilder, the input parses successfully, but 120100it becomes 12/01/0000, but that is not what I need.
API- Joda Time? appendTwoDigitYear 1950 00 1900 ?