Java SimpleDateFormat 返回意外结果

2022-09-03 08:44:33

我正在尝试使用Java的SimpleDateFormat使用以下代码解析字符串。

public class DateTester {

    public static void main(String[] args) throws ParseException {
        String dateString = "2011-02-28";

        SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");

        System.out.println(dateFormat.parse(dateString));
    }
}

我期待一些解析错误。但有趣的是,它打印以下字符串。

Wed Jul 02 00:00:00 IST 195

无法推理。任何人都可以帮忙吗?

谢谢


答案 1

默认情况下,SimpleDateFormat是宽松的,所以要让它失败,你需要做:

dateFormat.setLenient( false ) ;

在解析日期之前。然后,您将获得异常:

java.text.ParseException: Unparseable date: "2011-02-28"

答案 2

SimpleDateFormat已解析为号 2011,因为月 () 是日期模式的第一部分。2011MM

如果将 2011 年加上 28 年,则得到 195 年。

2011月是167年零7个月。7月是第7个月。您指定 02 作为日期,28 作为年份,28 + 167 = 195,因此是正确的。02 July 195


推荐