2

2つの日付の差を計算したい。現在、私はやっています:

Calendar firstDate = Calendar.getInstance();
firstDate.set(Calendar.DATE, 15);
firstDate.set(Calendar.MONTH, 4);
firstDate.get(Calendar.YEAR);

int diff = (new Date().getTime - firstDate.getTime)/(1000 * 60 * 60 * 24)

これにより、出力 0 が得られます。ただし、新しい Date() が 15 のときに出力 0 を取得する必要があります。現在、新しい日付は 14 です。これにより、さらに計算が間違ってしまい、これを解決する方法がわかりません。提案してください。

4

2 に答える 2

3

2 つの日付の差を求めるのは、2 つの日付を減算して結果を (24 * 60 * 60 * 1000) で割るほど簡単ではありません。実際、それは間違っています!

/* Using Calendar - THE CORRECT (& Faster) WAY**/  
//assert: startDate must be before endDate  
public static long daysBetween(final Calendar startDate, final Calendar endDate) {  
 int MILLIS_IN_DAY = 1000 * 60 * 60 * 24;  
 long endInstant = endDate.getTimeInMillis();  
 int presumedDays = (int) ((endInstant - startDate.getTimeInMillis()) / MILLIS_IN_DAY);  
 Calendar cursor = (Calendar) startDate.clone();  
 cursor.add(Calendar.DAY_OF_YEAR, presumedDays);  
 long instant = cursor.getTimeInMillis();  
 if (instant == endInstant)  
  return presumedDays;  
 final int step = instant < endInstant ? 1 : -1;  
 do {  
  cursor.add(Calendar.DAY_OF_MONTH, step);  
  presumedDays += step;  
 } while (cursor.getTimeInMillis() != endInstant);  
 return presumedDays;  
}  

詳細については、こちらをご覧ください。

于 2012-05-14T18:05:44.117 に答える
1

新しいDate()を作成しても、代わりに現在の時刻と日付が表示されるとは思いません。

Calendar cal = Calendar.getInstance();
Date currentDate = cal.getTime();
Date firstDate = new Date();
firstDate.setHour(...);
firstDate.setMinute(...);
firstDate.setSeconds(...);

long dif = currentDate.getTime() - firstDate.getTime();

ご覧のとおり、互いに減算するのと同じくらい簡単です...

于 2012-05-14T18:24:48.447 に答える