2012-06-15 2 views
9

Можно создать дубликат:
Calculating the Difference Between Two Java Date InstancesКак получить количество дней между двумя датами в java?

Как получить количество дней между двумя датами в Java?

Каков наилучший способ? Вот то, что я получил, но это не самый лучший:

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; 
    } 
+2

В частности, этот ответ: http://stackoverflow.com/a/4549327/22656 –

ответ

22

я обычно делаю что-то вроде этого:

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

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

Нет необходимости во внешних Lib, и достаточно легко


Update: Просто видел, что вы тоже хотите использовать «Даты», аналогичный метод применяется:

//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 время или другой LIB может сделать вашу жизнь немного легче, хотя я не вижу текущий способ трудно реализовать


обновление: Важное примечание! это работает только в часовом поясе, который не имеет летней или аналогичной настройки, или ваше определение «разница в днях» на самом деле означает «разница в 24-часовой единице»

+2

Просто напоминание людям, использующим этот подход, это работает только в часовом поясе, который не имеет летней или аналогичной настройки. –

+0

Я вернул ответы на оригинал, так как изменения, внесенные в этот ответ, добавляет то, что не является частью моего первоначального ответа (упоминание 'TimeUnit.MILLISECONDS.toDays (date1.getTime() - date2.getTime());). Я думаю, что такое редактирование лучше поместить в качестве другого ответа вместо того, чтобы менять существующий ответ другого человека. –

+0

Ваш первый комментарий здесь очень важен. Этот подход дает неправильный ответ, если 'date1' встречается во время летнего времени, а' date2' - во время не-дневного времени. Поэтому для любой страны на земле, которая имеет летнее время, неправильно. –

Смежные вопросы