【发布时间】:2021-06-12 13:51:34
【问题描述】:
问题是计算两个日期之间的天数。这是我的代码
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd)");
Scanner input=new Scanner(System.in);
String date1=input.nextLine();
String date2=input.nextLine();
Date d1 =sdf.parse(date1);
Date d2= sdf.parse(date2);
if(d1.getTime()>d2.getTime()) {
System.out.println(d2.getTime()-d1.getTime()/(24*60*60*1000));
}
else
System.out.println(d1.getTime()-d2.getTime()/(24*60*60*1000));
输出是
2010/05/29
2010/01/01
Exception in thread "main" java.text.ParseException: Unparseable date: "2010/05/29"
at java.base/java.text.DateFormat.parse(DateFormat.java:396)
at HW10_09156136_1092.HW10_Ex01.main(HW10_Ex01.java:15)
【问题讨论】:
-
因为将 throws 子句添加到方法并不会阻止抛出该异常。恰恰相反。它只是将该方法标记为可能抛出该异常,以便调用者可以根据需要在 try-catch-block 中处理它。但由于 main 方法是入口点,所以没有特殊处理。
-
解决您的问题的方法是不要尝试以任何方式处理异常。相反,您需要查看异常发生的原因并修改您的代码,使其不会被抛出。在您的情况下,您尝试解析年、月和日由
/分隔的日期,但在您的日期格式中,您使用的格式是使用-。 -
(1) 不要使用
SimpleDateFormat和Date。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDate和DateTimeFormatter。 (2) 不要自己计算时间。你的也是不正确的。将日期和时间数学留给库方法。 (3) 在方法中输入自己的代码时,去掉注释// TODO Auto-generated method stub。
标签: java date time days parseexception