Моя цель - провести строгий разбор (и запретить такие даты, как, например, '98/99').Однако следующий код вызывает java.text.ParseException
с сообщением Неразборчивая дата: "98/01" :
SimpleDateFormat sdf = new SimpleDateFormat("yy/ww");
sdf.setLenient(false);
sdf.parse("98/01");
Это действительно для первой недели 1998 года , который начинается в четверг.Однако разбор недели всегда возвращает дату первого дня этой недели.В этом случае это будет 12/29/1997 .И именно поэтому возникает исключение.
Кажется, эта проблема возникает из класса GregorianCalendar
и, более конкретно, из метода computeTime()
, который проверяет, совпадают ли исходные поля с полями, внешне установленными при анализе не снисходителен :
if (!isLenient()) {
for (int field = 0; field < FIELD_COUNT; field++) {
if (!isExternallySet(field)) {
continue;
}
if (originalFields[field] != internalGet(field)) {
// Restore the original field values
System.arraycopy(originalFields, 0, fields, 0, fields.length);
throw new IllegalArgumentException(getFieldName(field));
}
}
}
Это ошибка?Я думаю, что разбор 1998/01 должен действительно возвращать 12/29/1997 и не вызывать никаких исключений.Однако знаете ли вы, как сделать синтаксический анализ 01/01/1998 вместо этого (который будет первым днем недели в указанном году)?