LOCALDATEは静かに悪いの日付を修正するのですか?

エンドユーザー :

私は例外をから期待されます:

LocalDate.parse("9/31/2018",DateTimeFormatter.ofPattern("M/d/yyyy"));

代わりに、私は2018年9月30日を持って!誤解しないで、それはスマートであることだが、私が持っていることのniceは、Javaの日付クラスから精度の高まりレベルを期待して...

缶誰がどのように/理由のいくつかの光を当てますか?これは私のテストで台無しになるだろう。

ジョンスキート:

これはのためにあるResolverStyle値を解析するためにフォーマッタによって使用されます。(少なくとも私のマシン上の)デフォルトでは、「スマート」です。

例えば、あることを最後の有効な日のヶ月を超えて任意の値を変換し、1から31まで日のヶ月であることを保証します年、月、日のヶ月スマートモードを使用して、ISOのカレンダーシステムで解決最後の有効な日のヶ月。

...しかし、あなたはそれが「厳しい」ではなく、その場合には解析が失敗することができます。(使用した完全な例uの代わりのy時代を指定していないのあいまいさを避けるために):

import java.time.*;
import java.time.format.*;

public class Test {

    public static void main (String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/uuuu");
        // With the "smart" resolver style, it parses
        System.out.println(formatter.getResolverStyle());
        LocalDate date = LocalDate.parse("9/31/2018", formatter);
        System.out.println(date);

        // But with a strict style...
        formatter = formatter.withResolverStyle(ResolverStyle.STRICT);
        LocalDate.parse("9/31/2018", formatter);
    }
}

おすすめ

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