Java计算两个日期天数差时触发ParseException问题排查
问题排查与解决方案
嘿,我一眼就揪出了导致ParseException的两个核心问题,咱们一步步来解决:
错误点分析
- 日期分隔符不匹配:你定义的
SimpleDateFormat格式是"dd-mm-yyyy"(用横杠-分隔),但实际传入的日期字符串是用斜杠/分隔的(比如"11/11/2020"),格式不匹配直接触发了解析异常。 - 模式字母混淆:格式里的小写
mm代表的是分钟,而不是月份!表示月份的正确模式是大写的MM,这也是导致解析失败的关键原因之一。
修正后的传统API版本
先给你修复好基于SimpleDateFormat的代码:
import java.text.SimpleDateFormat; import java.text.ParseException; import java.util.Date; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { String date1 = "11/11/2020"; String date2 = "13/11/2020"; try { // 修正:用MM表示月份,分隔符改为/匹配输入字符串 SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); Date date_1 = dateFormat.parse(date1); Date date_2 = dateFormat.parse(date2); System.out.println(date_1); System.out.println(date_2); long numberOfDays = date_2.getTime() - date_1.getTime(); numberOfDays = TimeUnit.DAYS.convert(numberOfDays, TimeUnit.MILLISECONDS); System.out.println(numberOfDays); } catch (ParseException ex) { ex.printStackTrace(); // 建议打印异常栈,方便排查更细节的问题 } } }
更推荐的Java 8+新日期API方案
SimpleDateFormat是线程不安全的,而且API设计偏老旧,推荐使用Java 8引入的java.time日期API,代码更简洁且不易出错:
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; public class Main { public static void main(String[] args) { String date1 = "11/11/2020"; String date2 = "13/11/2020"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); LocalDate localDate1 = LocalDate.parse(date1, formatter); LocalDate localDate2 = LocalDate.parse(date2, formatter); // 直接计算天数差,无需手动处理毫秒 long daysDiff = ChronoUnit.DAYS.between(localDate1, localDate2); System.out.println(daysDiff); } }
内容的提问来源于stack exchange,提问作者M0nzter
相关产品推荐
相关产品推荐

