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?
You should be using a
Period
in order to determine the number of months/days/etc involved: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.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
andend
as above, or if you want to keep theInterval
, you can use:The first code prints P187D, in ISO 8601 format.
The second code prints only 4 days because you're missing the months (
period.getMonths()
).You can use this code.