o1 = ((Long) arg0).toString(); // treat integers as years
} else if (arg0 instanceof String) {
o1 = (String) arg0;
} else {
// ignore cell values that aren't strings
return new EvalError("Not a String - cannot parse to date");
}
// "o, boolean month_first (optional)"
if (args.length == 1 || (args.length == 2 && args[1] instanceof Boolean)) {
boolean month_first = true;
if (args.length == 2) {
month_first = (Boolean) args[1];
}
try {
return CalendarParser.parse( o1, (month_first) ? CalendarParser.MM_DD_YY : CalendarParser.DD_MM_YY);
} catch (CalendarParserException e) {
Date d = ParsingUtilities.stringToDate(o1);
if (d != null) {
return d;
} else {
try {
return javax.xml.bind.DatatypeConverter.parseDateTime(o1).getTime();
} catch (IllegalArgumentException e2) {
}
// alternate implementation which may be useful on some JVMs?
// try {
// return javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(o1).toGregorianCalendar().getTime();
// } catch (DatatypeConfigurationException e2) {
// }
}
return new EvalError("Cannot parse to date");
}
}
// "o, format1, format2 (optional), ..."
if (args.length>=2) {
for (int i=1;i<args.length;i++) {
if (!(args[i] instanceof String)) {
// skip formats that aren't strings
continue;
}
String format = (String) args[i];
SimpleDateFormat formatter;
try {
formatter = new SimpleDateFormat(format);
} catch (IllegalArgumentException e) {
return new EvalError("Unknown date format");
}
Date date = null;
try {
date = formatter.parse(o1);
} catch (java.text.ParseException e) {
continue;
}
if (date != null) {
GregorianCalendar c = new GregorianCalendar();
c.setTime(date);
return c;
}
}
return new EvalError("Unable to parse as date");
}
return null;
}