Как можно проанализировать дату (представленную в виде строки) в формате «ddMM» и преобразовать ее в объект Date в Java? - PullRequest
1 голос
/ 03 марта 2020

Я использую класс SimpleDateFormatter для преобразования строки в дату. У меня есть следующий код, который работает для 27 февраля 2020 года:

SimpleDateFormat FORMATTER = new SimpleDateFormat("ddMM"); //always current year
Date TODAY = FORMATTER.parse("2702");
System.out.println(TODAY);

Это разрешает до следующей даты:

Fri Feb 27 00:00:00 UTC 1970

Однако, когда я пытаюсь сделать то же самое для 29 февраля 2020 (високосный год), я получаю сообщение об ошибке:

Код:

SimpleDateFormat FORMATTER = new SimpleDateFormat("ddMM"); //always current year
Date TODAY = FORMATTER.parse("2902");
System.out.println(TODAY);

Вывод:

Sun Mar 01 00:00:00 UTC 1970

Может кто-нибудь, пожалуйста, предложить способ, чтобы я мог взять с учетом этого високосного года, используя этот формат даты?

Спасибо.

1 Ответ

1 голос
/ 03 марта 2020

Вам следует использовать Java 8 Time API, поскольку он поддерживает указание года по умолчанию.

public static Date dayMonthToDate(String dayMonth) {
    DateTimeFormatter FORMATTER = new DateTimeFormatterBuilder()
            .appendPattern("ddMM")
            .parseDefaulting(ChronoField.YEAR, Year.now().getValue())
            .toFormatter();

    LocalDate localDate = LocalDate.parse(dayMonth, FORMATTER);
    Instant instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
    return Date.from(instant);
}

Тест

public static void main(String[] args) {
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

    System.out.println(dayMonthToDate("2702"));
    System.out.println(dayMonthToDate("2902"));
}

Выход

Thu Feb 27 00:00:00 UTC 2020
Sat Feb 29 00:00:00 UTC 2020
...