Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to calculate difference between two dates in years...etc with Joda-Time

Tags:

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,  
like image 651
MrAwesome8 Avatar asked Feb 10 '14 02:02

MrAwesome8


1 Answers

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.

like image 134
Rob Hruska Avatar answered Oct 16 '22 20:10

Rob Hruska