我怎样才能找到两个日期之间的天数?

我有两个Date 。 我如何区分这两个日期之间的差异?

我听说过SimpleDateFormat ,但我不知道如何使用它。

我试过这个:

 String fromdate = "Apr 10 2011"; SimpleDateFormat sdf; sdf = new SimpleDateFormat("MMM DD YYYY"); sdf.parse(fromdate); Calendar cal = Calendar.getInstance(); cal.setTime(sdf); 

我也试过这个:

 String date1 = "APR 11 2011"; String date2 = "JUN 02 2011"; String format = "MMM DD YYYY"; SimpleDateFormat sdf = new SimpleDateFormat(format); Date dateObj1 = sdf.parse(date1); Date dateObj2 = sdf.parse(date2); long diff = dateObj2.getTime() - dateObj1.getTime(); int diffDays = (int) (diff / (24* 1000 * 60 * 60)); System.out.println(diffDays); 

但我得到了例外“非法模式字符’Y’。”

其他答案是正确但过时的。

java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了旧的麻烦的日期时间类,如java.util.Date.Calendarjava.text.SimpleDateFormat 。 Joda-Time团队还建议迁移到java.time。

要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。

大部分java.timefunction都被反向移植到ThreeTen-Backport中的 Java 6和7,并进一步适应了ThreeTenABP中的 Android。

ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。

LocalDate

LocalDate类表示没有时间且没有时区的仅日期值。

我建议尽可能使用标准的ISO 8601格式。 但在您的情况下,我们需要指定格式模式。

 String input = "Apr 10 2011"; DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MMM d uuuu" ); LocalDate earlier = LocalDate.parse ( input , f ); DateTimeFormatter formatterOut = DateTimeFormatter.ofLocalizedDate ( FormatStyle.MEDIUM ).withLocale ( Locale.US ); String output = earlier.format ( formatterOut ); LocalDate later = earlier.plusDays ( 13 ); long days = ChronoUnit.DAYS.between ( earlier , later ); 

转储到控制台。

 System.out.println ( "from earlier: " + earlier + " to later: " + later + " = days: " + days + " ending: " + output ); 

从早期:2011-04-10到更晚:2011-04-23 =天:13结束:2011年4月10日

这是一篇使用Calendar来解决此问题的文章。 http://tripoverit.blogspot.com/2007/07/java-calculate-difference-between-two.html

我相信Joda Time还为这种情况提供了API支持

你有两个Date对象?

答案不能简单。

 public double computeDaysBetweenDates(Date d1, Date d2) { long diff; diff = d2.getTime() - d1.getTime(); return ((double) diff) / (86400.0 * 1000.0); } 

日期对象是包含UTC POSIX EPOCH时间的long的精简包装器,该时间是自UTC时间1970年1月1日午夜以来经过的毫秒数。 只需从较晚的值中减去较早的值,即可得到间隔的毫秒数。 知道了,你只需要除以一天中的毫秒数。

请注意,这个答案假设一天是86400秒,而且……大多数情况都是如此。

请注意,即使您已格式化日期字符串,此解决方案仍然适用。 如果您能够首先将日期/时间解析为Date对象,那么您仍然可以使用它们调用此函数。

这段代码应该告诉你如何做你需要的……

 public static void main(String[] args) { Calendar firstOfTheMonthCalendar = Calendar.getInstance(); firstOfTheMonthCalendar.set(Calendar.DAY_OF_MONTH, 1); Date firstOfTheMonthDate = firstOfTheMonthCalendar.getTime(); Date nowDate = new Date(); int diffInDays = determineDifferenceInDays(firstOfTheMonthDate, nowDate); System.out.println("Number of days betweens dates: " + diffInDays); } private static int determineDifferenceInDays(Date date1, Date date2) { Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(date1); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(date2); long diffInMillis = calendar2.getTimeInMillis() - calendar1.getTimeInMillis(); return (int) (diffInMillis / (24* 1000 * 60 * 60)); } 

java中两个日期字符串之间的区别

这将有助于您获得一些想法