Perhaps a combined TimeZone
and "Time (hours/minutes/seconds)" issue?
Case I
Different timezones and different day times:
public static void main(final String[] args) {
final Calendar march14 = Calendar.getInstance(TimeZone.getTimeZone("US/Hawaii"));
march14.set(2014, Calendar.MARCH, 14, 23, 59, 0);
final Calendar march16 = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo"));
march16.set(2014, Calendar.MARCH, 16, 0, 0, 0);
final long diffInMs = march16.getTimeInMillis() - march14.getTimeInMillis();
System.out.println("diff = " + diffInMs / (24 * 3600 * 1000)+" day(s)");
}
This prints:
diff = 0 day(s)
Case II
However, adjusting the time zone:
public static void main(final String[] args) {
final Calendar march14 = Calendar.getInstance(TimeZone.getTimeZone("US/Hawaii"));
march14.set(2014, Calendar.MARCH, 14, 23, 59, 0);
final Calendar march16 = Calendar.getInstance(TimeZone.getTimeZone("US/Hawaii")); // <- CHANGE!
march16.set(2014, Calendar.MARCH, 16, 0, 0, 0);
final long diffInMs = march16.getTimeInMillis() - march14.getTimeInMillis();
System.out.println("diff = " + diffInMs / (24 * 3600 * 1000)+" day(s)");
}
This prints:
diff = 1 day(s)
Case III
And adjusting the time (hours/minutes/seconds):
public static void main(final String[] args) {
final Calendar march14 = Calendar.getInstance(TimeZone.getTimeZone("US/Hawaii"));
march14.set(2014, Calendar.MARCH, 14, 0, 0, 0); // <- CHANGE!
final Calendar march16 = Calendar.getInstance(TimeZone.getTimeZone("US/Hawaii"));
march16.set(2014, Calendar.MARCH, 16, 0, 0, 0);
final long diffInMs = march16.getTimeInMillis() - march14.getTimeInMillis();
System.out.println("diff = " + diffInMs / (24 * 3600 * 1000)+" day(s)");
}
This prints:
diff = 2 day(s)
Conclusions
My two advices:
- Don't use magic numbers, set all parts of your date/calendar objects that are relevant
- Always set the
TimeZone
when working with date/time
Additional note to SimpleDateFormat
By the way: In SimpleDateFormat
m
is for minutes, M
for month in year, see http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html. It was pure random that the result of your calculations was 2
.