私はTimeUnitクラスの奇妙な動作に気がついたので、この最小限の例を作成して再現しました。TimeUnitクラスが壊れていますか?
long differenceInDays;
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTimeInMillis(1466062306000l); // Thu Jun 16 2016 09:31:46 GMT+0200
c2.setTimeInMillis(1466028000000l); // Thu Jun 16 2016 00:00:00 GMT+0200
differenceInDays = TimeUnit.DAYS.convert(c2.getTimeInMillis() - c1.getTimeInMillis(), TimeUnit.MILLISECONDS);
System.out.println(differenceInDays); // obviously zero
c2.add(Calendar.DATE, +1);
differenceInDays = TimeUnit.DAYS.convert(c2.getTimeInMillis() - c1.getTimeInMillis(), TimeUnit.MILLISECONDS);
System.out.println(differenceInDays); // why zero and not one?
c2.add(Calendar.DATE, +1);
differenceInDays = TimeUnit.DAYS.convert(c2.getTimeInMillis() - c1.getTimeInMillis(), TimeUnit.MILLISECONDS);
System.out.println(differenceInDays); // suddenly a 1, but not a 2 like expected
最初に差異が計算されるのは、日付間に1日が含まれないため、0であることは明らかです。
しかし、2日目は1日追加されるので、違いはまだ0のままですか?
出力:
私はこの問題は、日光私は同じ年以内に計算を行うため、関連する時間やうるう年を保存、でも月であるとは思いません。
Hereは、チェックするミリ秒単位の計算機です。