Count Down to Christmas with Joda-Time

countdown, datetime, java, jodatime, time

Solution

You should be using a `Period` in order to determine the number of months/days/etc involved:

Period period = new Period(start, end);

Converting an `Interval` to a period would have been fine too, but parameterless overload includes all period units - and you weren't printing out the months.

Now if you only want days, hours, minutes, seconds then you need to create an appropriate `PeriodType`, e.g.

PeriodType periodType = PeriodType.dayTime().withMillisRemoved();
Period period = new Period(start, end, periodType);

Then you can ask for those individual fields, and all should be well.

(You could actually use just `dayTime()`, given that the millis won't interfere with anything else.)

So you can either build your period directly from the `start` and `end` as above, or if you want to keep the `Interval`, you can use:

Period period = interval.toPeriod(periodType);

Problem

I am trying to implement Joda-Time to count down to Christmas, but so far I'm struck. I tried java.util.Date and most StackOverflow questions and answers suggested to use Joda-Time. But I can't get it working. Some codes give different answers. Here are some codes I tried, ``` DateTime now = new DateTime(); DateTime christmas = new DateTime(2012, 12, 25, 8, 0, 0, 0); Days daysToChristmas = Days.daysBetween(today, christmas); System.out.println(daysToChristmas.toString()); ``` And this prints P187D as answer. ``` DateTime start = new DateTime(DateTime.now()); DateTime end = new DateTime(2012, 12, 25, 0, 0, 0 ,0); Interval interval = new Interval(start, end); Period period = interval.toPeriod(); System.out.println("Seconds " + period.getSeconds()); System.out.println("Minutes " + period.getMinutes()); System.out.println("Hours " + period.getHours()); System.out.println("Days " + period.getDays()); ``` And this prints following result, ``` Seconds 36 Minutes 21 Hours 7 Days 4 ``` Where I went wrong?

Original source