私は11月7日に激怒しています。
2 つの Java Date オブジェクト間の日数を計算するメソッドを作成しました (言及される前に、JodaTime はオプションではありません)。このメソッドはほとんどの場合機能しますが、開始 xor 終了日が日中に発生した場合時間を節約すると、出力は 1 日ずれます。
カレンダーには日付のタイムゾーンをオーバーライドする方法がありますか? 日付が実際にどのタイムゾーンにあるかは気にしませんが、同じである必要があります!
以下のコード:
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)
}