UPDATE:2013 年的原始答案现在已经过时了,因为一些课程已被替换。执行此操作的新方法是使用新的java.time类。
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MM yyyy");
String inputString1 = "23 01 1997";
String inputString2 = "27 04 1997";
try {
LocalDateTime date1 = LocalDate.parse(inputString1, dtf);
LocalDateTime date2 = LocalDate.parse(inputString2, dtf);
long daysBetween = Duration.between(date1, date2).toDays();
System.out.println ("Days: " + daysBetween);
} catch (ParseException e) {
e.printStackTrace();
}
请注意,此解决方案将给出实际的 24 小时天数,而不是日历天数。对于后者,使用
long daysBetween = ChronoUnit.DAYS.between(date1, date2)
原答案(从 Java 8 开始已过时)
您正在对字符串进行一些不必要的转换。有一个SimpleDateFormat类 - 试试这个:
SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy");
String inputString1 = "23 01 1997";
String inputString2 = "27 04 1997";
try {
Date date1 = myFormat.parse(inputString1);
Date date2 = myFormat.parse(inputString2);
long diff = date2.getTime() - date1.getTime();
System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
} catch (ParseException e) {
e.printStackTrace();
}
EDIT:由于已经对这段代码的正确性进行了一些讨论:它确实考虑了闰年。但是,那TimeUnit.DAYS.convert由于毫秒转换为天,函数会失去精度(有关更多信息,请参阅链接的文档)。如果这是一个问题,diff
也可以手动转换:
float days = (diff / (1000*60*60*24));
请注意,这是一个float
值,不一定是int
.