2012-06-15 53 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和很容易


更新:刚刚看到你也想要“日期”,类似的方法适用:

//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

您的第一条评论非常重要。如果在夏令时期间发生“日期1”而在非夏令时发生“日期2”,则此方法会给出错误答案。因此,任何有夏时制的国家都是错误的。 –

相关问题