我对 11 月 7 日感到愤怒。
我编写了一个方法来计算两个 Java Date 对象之间的天数(在它被提及之前,JodaTime 不是一个选项)——该方法在大多数情况下都有效,但是当开始 xor 结束日期发生在白天时节省时间,输出减少了一天。
日历是否有某种方式可以覆盖日期的时区?我不在乎日期实际在哪个时区,但它们必须是同一个时区!
下面的代码:
public int getDayRange() {
//startDate = "Sat Nov 06 00:00:00 EDT 2010";
//endDate = "Sun Nov 07 23:59:59 EST 2010";
TimeZone tz = TimeZone.getTimeZone("UTC");
GregorianCalendar cal1 = new GregorianCalendar(tz);
GregorianCalendar cal2 = new GregorianCalendar(tz);
cal1.setTime(startDate);
cal2.setTime(endDate);
long ms1 = cal1.getTime().getTime();
long ms2 = cal2.getTime().getTime();
long difMs = ms2-ms1;
long msPerDay = 1000*60*60*24;
double days = difMs / msPerDay;
return (int) Math.floor(days)+1;
//returns 3(!!!) days (wrong)
}