JodaTime, как правильно разобрать dd-MMM-ы в DataTime - PullRequest
3 голосов
/ 04 февраля 2012

Фрагмент кода:

DateTimeFormatter dtf = new DateTimeFormatterBuilder()
        .appendDayOfMonth(2)
        .appendLiteral('-')
        .appendMonthOfYearShortText()
        .appendLiteral('-')
        .appendTwoDigitYear(2050)  // pivot point for correct interpretation of last two digits of year.
        .toFormatter();

        String strDate = "04-Feb-12";
        DateTime updateDate = dtf.parseLocalDate(strDate).toDateTimeAtStartOfDay();

И вывод:

java.lang.IllegalArgumentException: Invalid format: "04-Feb-12" is malformed at "Feb-12"
at org.joda.time.format.DateTimeFormatter.parseLocalDateTime(DateTimeFormatter.java:821)
at org.joda.time.format.DateTimeFormatter.parseLocalDate(DateTimeFormatter.java:765)
...

Я тоже пробовал:

DateTimeFormatter dtf = DateTimeFormat.forPattern("dd-MMMM-yy");

Однако никоим образом.

Заранее спасибо.

1 Ответ

8 голосов
/ 04 февраля 2012

У вас проблема с локалью.Код, который вы публикуете, прекрасно работает на моей машине.Я могу, однако, воспроизвести точную ошибку, которую вы получаете, если я изменю локаль на Locale.FRENCH.

Измените вашего строителя на:

DateTimeFormatter dtf = new DateTimeFormatterBuilder()
    .appendDayOfMonth(2)
    .appendLiteral('-')
    .appendMonthOfYearShortText()
    .appendLiteral('-')
    .appendTwoDigitYear(2050)
    .toFormatter().withLocale(Locale.US);
...