エンドユーザー :
私は例外をから期待されます:
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);
}
}