どのように私は「DDMM」の形式で(文字列として提供される)日付を解析し、Javaで日付オブジェクトに変換することができますか?

シヴ:

私が使用していSimpleDateFormatterた日付に文字列を変換するためにクラスを。私は2020年2月27日のために働く、次のコードを持っています:

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

私は2020年2月29日(うるう年)のために同じことをしようとすると、しかし、私はエラーを取得します:

コード:

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

私はこの日付フォーマットを使用して、同様のアカウントの閏年を考慮に入れることができるように誰かが道を提案してくださいことはできますか?

ありがとうございました。

アンドレアス:

それはデフォルトの年を指定するサポートしているのであなたは、Javaの8時間の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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=21031&siteId=1