【发布时间】:2021-04-30 08:13:41
【问题描述】:
我不知道为什么没有错误。代码是
String datestr = "2021-01-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
try {
System.out.println(sdf.parse(datestr));
} catch (ParseException e) {
e.printStackTrace();
}
由于日期字符串 2021-01-01 与格式模式字符串 yyyy-MM 不匹配,因此我预期并希望出现异常。
控制台打印Fri Jan 01 00:00:00 CST 2021。
相反的情况确实会导致预期的异常。 我让代码看起来像这样
String datestr = "2021-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
System.out.println(sdf.parse(datestr));
} catch (ParseException e) {
e.printStackTrace();
}
控制台打印错误消息:Unparseable date: "2021-01"
谁能告诉我为什么?
【问题讨论】:
-
为什么你用
yyyy-MM-dd解析2021-01,而用yyyy-MM解析2021-01-01???我真的很好奇... -
我建议你不要使用
SimpleDateFormat和Date。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDate和YearMonth。 -
这是一个很好的问题。没有理由结束这个问题(说是因为它已经获得了几票赞成票)。
-
用法:
SimpleDateFormat不是一个函数,它是一个类。虽然在这种情况下你的意思很清楚,但在其他情况下,使用正确和商定的条款会使人们完全了解你的意思,而人们要么不知道,要么更糟,完全误解你的意图。跨度>
标签: java validation simpledateformat date-parsing parseexception