【发布时间】:2021-12-11 07:56:13
【问题描述】:
我得到两个字符串,我必须将它们转换为日期并显示它们之间的天数差异。但如果两个日期之一无效,我必须抛出异常。
这是我目前完成这项任务的代码:
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String d1 = sc.next();
String d2 = sc.next();
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
try {
Date date1 = formatter.parse(d1);
Date date2 = formatter.parse(d2);
long dt = (date1.getTime() - date2.getTime()) + 3600000;
long days = (dt / 86400000L);
System.out.println(days);
} catch (ParseException e) {
System.out.println("Data inválida");
e.printStackTrace();
}
}
}
但是如果我输入了一个无效的日期,比如02/29/2021,它会转换为03/01/2021,而不是抛出异常。
【问题讨论】:
-
试试
formatter.setLenient(false); -
你不应该使用
Date和SimpleDateFormat,它们都已经过时了。请改用java.time包中的类。在你的情况下可能是LocalDate。然后使用ChronoUnit.DAYS.between(date1, date2),您就有了介于两者之间的时间。 -
@shmosel 成功了,谢谢
-
@MCEmperor 我如何更改格式化程序以使用 LocalDate?
标签: java string date simpledateformat localdatetime