Автор оригинала: mkyong.
В этом примере показано, как проанализировать дату (02 января) без указания года.
package com.mkyong.time; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Locale; public class JavaDateExample { public static void main(String[] args) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM", Locale.US); String date = "02 Jan"; LocalDate localDate = LocalDate.parse(date, formatter); System.out.println(localDate); System.out.println(formatter.format(localDate)); } }
Выход
Exception in thread "main" java.time.format.DateTimeParseException: Text '02 Jan' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {DayOfMonth=2, MonthOfYear=1},ISO of type java.time.format.Parsed at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:2017) at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1952) at java.base/java.time.LocalDate.parse(LocalDate.java:428) at com.mkyong.time.JavaDateExample.main(JavaDateExample.java:20) Caused by: java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {DayOfMonth=2, MonthOfYear=1},ISO of type java.time.format.Parsed at java.base/java.time.LocalDate.from(LocalDate.java:396) at java.base/java.time.format.Parsed.query(Parsed.java:235) at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948) ... 2 more
Решение
Шаблона dd MMM
недостаточно; нам нужен DateTimeFormatterBuilder
, чтобы указать год по умолчанию для анализа даты.
package com.mkyong.time; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.time.temporal.ChronoField; import java.util.Locale; public class JavaDateExample { public static void main(String[] args) { DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendPattern("dd MMM") .parseDefaulting(ChronoField.YEAR, 2020) .toFormatter(Locale.US); String date = "02 Jan"; LocalDate localDate = LocalDate.parse(date, formatter); System.out.println(localDate); System.out.println(formatter.format(localDate)); } }
Выход
2020-01-02 02 Jan
Рекомендации
- Java 8 – Как преобразовать строку в LocalDate
- DateTimeFormatterBuilder javadoc (формат даты и времени)
Оригинал: “https://mkyong.com/java8/java-8-how-to-parse-date-with-dd-mmm-02-jan-without-year/”