How can I find the number of days between two Dates?
I have two Date
s. 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 YY开发者_开发技巧YY");
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'."
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
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
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.
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));
}
Difference between two date strings in java
this will help you in getting some idea
精彩评论