2016-05-01 3 views
1

В следующем фрагменте кода я ожидал, что исключение будет выбрано, потому что день недели не совпадает с днем ​​месяца. Я не мог найти ничего в DateTimeFormat Javadocs, чтобы сказать что-либо в любом случае о том, чтобы быть «строгим» над такими неправильными совпадениями, но я был смущен тем, что такие плохие данные были разрешены. Разве я что-то не понял или это сознательное дизайнерское решение, с которым я должен заниматься каким-то другим способом?JodaTime не срабатывает при несоответствии дня и месяца

public static void main(String[] args) { 
    DateTimeFormatter DATE_FORMAT_LONG_DATE = // 
     DateTimeFormat.forPattern("EEEE, d MMMM yyyy")// 
       .withZone(DateTimeZone.forID("Australia/Melbourne")); 
    final String text = "Friday, 1 February 2016"; // Wrong. 
    final DateTime parsed = DATE_FORMAT_LONG_DATE.parseDateTime(text); 
    System.out.println(text); 
    System.out.println(DATE_FORMAT_LONG_DATE.print(parsed)); 
} 

и выход:

Friday, 1 February 2016 
Friday, 5 February 2016 

ответ

4

Вы правы, это делает, - как documented (курсив мой):

Синтаксический создает результирующий момент, с помощью 'настройки' величина каждого разборного поля от наибольшего до наименьшего на начальный момент, обычно 1970-01-01T00: 00Z. Этот дизайн означает, что день месяца устанавливается до дня недели. Таким образом, если проанализированы как день месяца, так и день недели, а день недели неверен, то день недели отменяет день месяца. Это имеет побочный эффект, если вход не согласован.

Я согласен, что это несчастливо - но вы всегда можете переформатировать и проверить, отличаются ли значения.

+0

Спасибо Jon - ответ был в javadocs DateTimeFormatter, а не в DateTimeFormat. Придется вспомнить этот урок! –

Смежные вопросы