How can I find the number of days between two Dates?

℡╲_俬逩灬. 提交于 2019-12-17 14:08:29

问题


I have two Dates. How can I tell the difference between these two dates in days?

I have heard of SimpleDateFormat, but I don't know how to use it.

I tried this:

String fromdate = "Apr 10 2011";

SimpleDateFormat sdf;
sdf = new SimpleDateFormat("MMM DD YYYY"); 

sdf.parse(fromdate);

Calendar cal = Calendar.getInstance();
cal.setTime(sdf);

I also tried this:

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);

but I got the exception "Illegal pattern character 'Y'."


回答1:


The other answers are correct but outdated.

java.time

The java.time framework is built into Java 8 and later. These classes supplant the old troublesome date-time classes such as java.util.Date, .Calendar, & java.text.SimpleDateFormat. The Joda-Time team also advises migration to java.time.

To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations.

Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport and further adapted to Android in ThreeTenABP.

The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time.

LocalDate

The LocalDate class represents a date-only value without time-of-day and without time zone.

I suggest using standard ISO 8601 formats for your strings where possible. But in your case we need to specify a formatting pattern.

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 );

Dump to console.

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

from earlier: 2011-04-10 to later: 2011-04-23 = days: 13 ending: Apr 10, 2011




回答2:


Here is an article that uses Calendar to solve this problem. http://tripoverit.blogspot.com/2007/07/java-calculate-difference-between-two.html

I believe that Joda Time also provides API support for this scenario




回答3:


You have two Date objects?

The answer could not be simpler.

public double computeDaysBetweenDates(Date d1, Date d2) {
    long diff;

    diff = d2.getTime() - d1.getTime();
    return ((double) diff) / (86400.0 * 1000.0);
}

Date objects are thin wrappers around a long that contains a UTC POSIX EPOCH time, which is the number of milliseconds that have elapsed since midnight, Jan 1, 1970 UTC. You get your interval number of milliseconds just by subtracting the earlier value from the later. Knowing that, you just divide by the number of milliseconds in a day.

Note that this answer assumes that a day is 86400 seconds and ... that is mostly true.

Note that this solution is still apt even if you have formatted date strings. If you are able to parse your date/times into Date objects first, then you can still call this function with them.




回答4:


This code should show you how to do what you need...

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));
}



回答5:


Difference between two date strings in java

this will help you in getting some idea



来源:https://stackoverflow.com/questions/6218928/how-can-i-find-the-number-of-days-between-two-dates

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!