Joda Time strange hour

I'm trying to initialise a Joda-Time DateTime object with the hour of 12:00 here is how I do this:

public static final long MINUTE         = 60 * 1000;
public static final long HOUR           = 60 * MINUTE; 

DateTime defaultDate = new DateTime(HOUR * 12);
System.out.print("the hour is: " + defaultDate.getHourOfDay()) // getting 14

Why I am getting 14 and not 12? Maybe Mama didn't teach me how to read clock right?!

Jon Skeet
people
quotationmark

You're specifying a number of milliseconds since the Unix epoch, which was midnight UTC.

However, you're implicitly using the system default time zone in your DateTime, and I suspect that at the Unix epoch, your system time zone was UTC+2.

If you want to use a specific time zone, you can pass that in the constructor:

DateTime defaultDate = new DateTime(HOUR * 12, DateTimeZone.UTC);

Also, rather than using your own constants, you could either use DateTimeConstants.MILLIS_PER_HOUR or use java.util.concurrent.TimeUnit for conversions.

people

See more on this question at Stackoverflow