У меня есть следующий код, который создает LocalDate. Когда я вызываю на нем метод toString, на выходе получается 2016-01-05.

Я хочу, чтобы дата была в следующем формате. 05-янв-2016

int dayInt = Integer.parseInt(dayStr);
            int monthInt = Integer.parseInt(monthStr);
            int yearInt = Integer.parseInt(yearStr);

            LocalDate ldt = new LocalDate(yearInt, monthInt, dayInt);

            Log.e(TAG, "LocalDate = " + ldt.toString()); //eg 2016-01-05


            LocalDate localDate2 = LocalDate.parse(ldt.toString(), DateTimeFormat.forPattern("dd-MMM-yy"));

.

У меня следующее исключение, кто-нибудь знает, как я могу это сделать?

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

01-06 14:34:13.903: E/CustomExceptionHandler(8590): stack = java.lang.IllegalArgumentException: Invalid format: "2016-01-04" is malformed at "16-01-04"
01-06 14:34:13.903: E/CustomExceptionHandler(8590):     at org.joda.time.format.DateTimeFormatter.parseLocalDateTime(DateTimeFormatter.java:821)
01-06 14:34:13.903: E/CustomExceptionHandler(8590):     at org.joda.time.format.DateTimeFormatter.parseLocalDate(DateTimeFormatter.java:765)
01-06 14:34:13.903: E/CustomExceptionHandler(8590):     at org.joda.time.LocalDate.parse(LocalDate.java:178)
1
turtleboy 6 Янв 2016 в 17:35

2 ответа

Лучший ответ

Выражение ldt.toString() возвращает "2016-01-05".

Таким образом, ваш шаблон формата должен быть: « гггг-ММ-дд », но вы начинаете свой шаблон с дня, ожидающего только две цифры (как указано в сообщении об ошибке).

Ты говоришь:

Я хочу, чтобы дата была в следующем формате. 05-янв-2016

Затем вам нужно его отформатировать (не разбирать):

String s = DateTimeFormat.forPattern("dd-MMM-yyyy").withLocale(Locale.ENGLISH).print(ldt);
1
Meno Hochschild 6 Янв 2016 в 17:02

Год неверно отформатирован. Измените строку:

LocalDate localDate2 = LocalDate.parse(ldt.toString(), DateTimeFormat.forPattern("dd-MMM-yy"));

Чтобы :

LocalDate localDate2 = LocalDate.parse(ldt.toString(), DateTimeFormat.forPattern("dd-MMM-yyyy"));
0
Kristy Welsh 6 Янв 2016 в 14:46