improve guessing if upper date range check works or is it a numeric

This commit is contained in:
Shay Banon 2011-12-15 22:36:44 +02:00
parent 92c162d534
commit 1a26ba7968
1 changed files with 17 additions and 3 deletions

View File

@ -402,7 +402,7 @@ public class DateFieldMapper extends NumberFieldMapper<Long> {
long time = Long.parseLong(value); long time = Long.parseLong(value);
return timeUnit.toMillis(time); return timeUnit.toMillis(time);
} catch (NumberFormatException e1) { } catch (NumberFormatException e1) {
throw new MapperParsingException("failed to parse date field, tried both date format [" + dateTimeFormatter.format() + "], and timestamp number", e); throw new MapperParsingException("failed to parse date field [" + value + "], tried both date format [" + dateTimeFormatter.format() + "], and timestamp number", e);
} }
} }
} }
@ -413,14 +413,28 @@ public class DateFieldMapper extends NumberFieldMapper<Long> {
} }
try { try {
MutableDateTime dateTime = new MutableDateTime(3000, 12, 31, 23, 59, 59, 999, DateTimeZone.UTC); MutableDateTime dateTime = new MutableDateTime(3000, 12, 31, 23, 59, 59, 999, DateTimeZone.UTC);
dateTimeFormatter.parser().parseInto(dateTime, value, 0); int location = dateTimeFormatter.parser().parseInto(dateTime, value, 0);
// if we parsed all the string value, we are good
if (location == value.length()) {
return dateTime.getMillis();
}
// if we did not manage to parse, or the year is really high year which is unreasonable
// see if its a number
if (location <= 0 || dateTime.getYear() > 5000) {
try {
long time = Long.parseLong(value);
return timeUnit.toMillis(time);
} catch (NumberFormatException e1) {
throw new MapperParsingException("failed to parse date field [" + value + "], tried both date format [" + dateTimeFormatter.format() + "], and timestamp number");
}
}
return dateTime.getMillis(); return dateTime.getMillis();
} catch (RuntimeException e) { } catch (RuntimeException e) {
try { try {
long time = Long.parseLong(value); long time = Long.parseLong(value);
return timeUnit.toMillis(time); return timeUnit.toMillis(time);
} catch (NumberFormatException e1) { } catch (NumberFormatException e1) {
throw new MapperParsingException("failed to parse date field, tried both date format [" + dateTimeFormatter.format() + "], and timestamp number", e); throw new MapperParsingException("failed to parse date field [" + value + "], tried both date format [" + dateTimeFormatter.format() + "], and timestamp number", e);
} }
} }
} }