9

重複の可能性:
2つのJava日付インスタンス間の差異の計算

Javaで2つの日付の間の日数を取得するにはどうすればよいですか?

最善の方法は何ですか?これが私が得たものですが、それは最高ではありません:

public static ConcurrentHashMap<String, String> getWorkingDaysMap(int year, 
    int month, int day){
        int totalworkingdays=0,noofdays=0;
        String nameofday = "";
        ConcurrentHashMap<String,String> workingDaysMap = 
            new ConcurrentHashMap<String,String>();
        Map<String,String> holyDayMap = new LinkedHashMap<String,String>();
        noofdays = findNoOfDays(year,month,day);

        for (int i = 1; i <= noofdays; i++) {
            Date date = (new GregorianCalendar(year,month - 1, i)).getTime();
            // year,month,day
            SimpleDateFormat f = new SimpleDateFormat("EEEE");
            nameofday = f.format(date);

            String daystr="";
            String monthstr="";

            if(i<10)daystr="0";
            if(month<10)monthstr="0";

            String formatedDate = daystr+i+"/"+monthstr+month+"/"+year;

            if(!(nameofday.equals("Saturday") || nameofday.equals("Sunday"))){
                workingDaysMap.put(formatedDate,formatedDate);
                totalworkingdays++;
            }
        }

        return workingDaysMap;
    }

public static int findNoOfDays(int year, int month, int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month - 1, day);
        int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        return days;
    }
4

1 に答える 1

22

私は通常、次のようなことをします:

final long DAY_IN_MILLIS = 1000 * 60 * 60 * 24;

int diffInDays = (int) ((date1.getTime() - date2.getTime())/ DAY_IN_MILLIS );

外部ライブラリは必要なく、十分に簡単です


更新:「日付」の間にも必要なことがわかりました。同様の方法が適用されます。

//assume date1 < date2

List<Date> dateList = new LinkedList<Date>();
for (long t = date1.getTime(); t < date2.getTime() ; t += DAY_IN_MILLIS) {
  dateList.add(new Date(t));
}

もちろん、JODA time やその他の lib を使用すると、作業が少し楽になるかもしれませんが、現在の方法で実装するのは難しいとは思いません。


更新: 重要な注意事項! これは、夏時間または同様の調整がないタイムゾーンでのみ機能します。または、「日の差」の定義は、実際には「24時間単位の差」を意味します

于 2012-06-15T06:28:30.380 に答える