DateFormat 模式 "dd/MM/yyyy" 接受错误的月份

DateFormat pattern "dd/MM/yyyy" accept wrong months

我有一个带有“dd/MM/yyyy”(巴西模式)的字符串格式日期

但在我的代码中,当转换为日期时,接受了错误的月份。

    *String str = "01/15/2021"; 
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    Date dt = df.parse(str);        
    System.out.println(dt);*

结果是:3 月 1 日星期二 00:00:00 BRT 2022

如何使这个无效?

这应该可以解决问题:

df.setLenient(false);

但请查看其他日期类型,例如 LocalDate 或 ZonedDate。以后容易多了 ;)

现代解决方案使用 java.time 类,从不使用 DateCalendar.

默认情况下,LocalDate 解析是严格的而不是宽松的。 DateTimeParseException.

的陷阱
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
String input = "01/15/2021" ;
try {
    LocalDate ld = LocalDate.parse( input , f ) ;
} catch ( DateTimeParseException e ) {
    … handle faulty input here …
}