The Answer by Vitalii Fedorenko is correct, describing how to perform this calculation in a modern way with java.time classes (Duration
& ChronoUnit
) built into Java 8 and later (and back-ported to Java 6 & 7 and to Android).
Days
If you are using a number of days routinely in your code, you can replace mere integers with use of a class. The Days
class can be found in the ThreeTen-Extra project, an extension of java.time and proving ground for possible future additions to java.time. The Days
class provides a type-safe way of representing a number of days in your application. The class includes convenient constants for ZERO
and ONE
.
Given the old outmoded java.util.Date
objects in the Question, first convert them to modern java.time.Instant
objects. The old date-time classes have newly added methods to facilitate conversion to java.time, such a java.util.Date::toInstant
.
Instant start = utilDateStart.toInstant(); // Inclusive.
Instant stop = utilDateStop.toInstant(); // Exclusive.
Pass both Instant
objects to factory method for org.threeten.extra.Days
.
In the current implementation (2016-06) this is a wrapper calling java.time.temporal.ChronoUnit.DAYS.between
, read the ChronoUnit
class doc for details. To be clear: all uppercase DAYS
is in the enum ChronoUnit
while initial-cap Days
is a class from ThreeTen-Extra.
Days days = Days.between( start , stop );
You can pass these Days
objects around your own code. You can serialize to a String in the standard ISO 8601 format by calling toString
. This format of PnD
uses a P
to mark the beginning and D
means “days”, with a number of days in between. Both java.time classes and ThreeTen-Extra use these standard formats by default when generating and parsing Strings representing date-time values.
String output = days.toString();
P3D
Days days = Days.parse( "P3D" );