How to calculate difference between two dates in years...etc with Joda-Time
29,346
Period
gives you this out of the box.
Period period = new Period(d1, d2);
System.out.print(period.getYears() + " years, ");
System.out.print(period.getMonths() + " months, ");
// ...
To prettify and get a little more control over the output, you can use a PeriodFormatterBuilder
.
Related videos on Youtube
Author by
MrAwesome8
Updated on February 10, 2020Comments
-
MrAwesome8 over 4 years
import java.text.SimpleDateFormat; import java.util.Date; import org.joda.time.*; public class Test { public static void main(String[] args) { String dateStart = "01/01/2000 05:30"; String dateStop = "02/2/2001 06:31"; SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm"); Date d1 = null; Date d2 = null; try { d1 = format.parse(dateStart); d2 = format.parse(dateStop); DateTime dt1 = new DateTime(d1); DateTime dt2 = new DateTime(d2); System.out.print(Years.yearsBetween(dt1, dt2).getYears() + " years, "); System.out.print(Months.monthsBetween(dt1, dt2).getMonths() % 52 + " months, "); System.out.print(Weeks.weeksBetween(dt1, dt2).getWeeks() % 4 + " weeks, "); System.out.print(Days.daysBetween(dt1, dt2).getDays() % 7 + " days, "); System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, "); System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, "); } catch (Exception e) { e.printStackTrace(); } } }
I want to output the number of years, months, weeks, days, hours, and minutes between two dates using Joda-Time. My question is where do I implement the number of weeks in a month (which in never constant). I don't think my %'s are right either.
When run I get:
1 years, 13 months, 0 weeks, 6 days, 1 hours, 1 minutes,
-
Rob Hruska over 10 yearsIf you just use a
Period
, will that give you what you're after? -
MrAwesome8 over 10 yearsWhat do you mean by a Period? I know there are durations, intervals and periods but I do not know the difference.
-
Rob Hruska over 10 years
-
Dawood ibn Kareem over 10 yearsWhat do you mean "number of days"? You need to define how you want to treat the 23-hour and 25-hour days that result when daylight savings begins and ends.
-
MrAwesome8 over 10 yearsOnce minutes exceeds 60 then 1 is added to hours. once hours exceeds 24 then 1 is added to days. once days exceeds 24 then one is added to weeks. etc.
-
Rob Hruska over 10 years@DavidWallace Note that
Period
does account for that: "...periods represent an abstracted definition of a time period (eg. a day may not actually be 24 hours, it might be 23 or 25 at daylight savings boundary)..." -
Dawood ibn Kareem over 10 yearsYes, @RobHruska, you are right about that. However, judging from OP's previous comment, that's not actually what he/she wants. Either that, or he/she hasn't thought about it too much.
-
Rob Hruska over 10 years@DavidWallace True. Periods are probably what the OP wants - if not, a
Duration
might be appropriate. If neither, then I have no idea, and pity the person implementing their own date subtraction logic. :) -
Dawood ibn Kareem over 10 yearsYes. It's always worth stopping and thinking about these things, just to be sure that you are getting what you think you're getting, and to appreciate all the reasons why you shouldn't be trying to roll your own date arithmetic library.
-
MrAwesome8 over 10 yearsRob was correct. What I needed was a Period.
-
Basil Bourque over 10 years
-
-
MrAwesome8 over 10 yearsThank you, you have been very helpful.
-
TheRealChx101 over 8 yearsWhat is supposed to be
d1
andd2
? -
Rob Hruska over 8 years@chx101 They're
Date
s, check out the code in the question for context. -
vphilipnyc about 8 yearsActually, they are
org.joda.time.DateTime
instances (or more specifically, implementations ofReadableInstant
)