2012-06-15 89 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」,則此方法會給出錯誤答案。因此,任何有夏時制的國家都是錯誤的。 –

相關問題