2012-06-15 48 views
9

可能性の重複:
Calculating the Difference Between Two Java Date Instancesjavaの2つの日付間の日数を取得する方法は?

どのように私は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; 
    } 
+2

特に、この回答:http://stackoverflow.com// 22656分の4549327 –

答えて

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)); 
} 
もちろん

、私は困難な現在の方法では表示されませんが


アップデートを実装するために、あなたの人生が少し容易にすることがジョダ時間や他のlibを使用して:重要な注意を! これは夏時間やそれに類する調整がないタイムゾーンでのみ有効です。または、「日数の差」の定義は実際には「24時間単位の違い」を意味します。

+2

このアプローチを使用している人々にちょうどリマインダー、何の夏時間または同様の調整を持っていない時間帯については、この唯一の作品。 –

+0

が、私はこの答えに行われた編集は、私のオリジナルの答えの一部ではない何かを追加して( '言及し、オリジナルへの回答をロールバックされたTimeUnit.MILLISECONDS.toDays(date1.getTime() - date2.getTime() );)私は、このような種類の編集は、代わりに別の人の既存の答えを変える別の答えとして置く方が良いと思います。 –

+0

あなたの最初のコメントは本当に重要です。 date1'は、夏時間の間に発生すると 'date2'が非夏時間中に発生し'た場合、このアプローチは間違った答えを与えます。したがって、地球上の夏時間の節約がある国では間違っています。 –

関連する問題