2011-09-12 8 views
1

2つの異なる日の間の日数を計算する方法を考え出していますが、説明される。たとえば、8/1から8/31までの就業日数を計算したいとしますが、従業員は月曜日、火曜日、水曜日のみで作業します。その結果、この従業員はその期間に15日間しか働かないことになります。Java Calendarを使用して特定の日数を除いた特定の日数を計算する

誰かがjavaカレンダークラスを使用して同様のものを組み立てましたか?

+4

だけヒント:何を負いません、これを行うことは非常に、非常に注意してください、と見つけます会計士はあなたのためにそれをテストし、それが理にかなっているかどうかを確認します。プログラマーは論理的な生き物であり、会計士+税コードは論理的ではありません。間違っていることがたくさんある。 – Oliver

+0

その月の月曜日、火曜日または水曜日のいずれかが銀行/祝日の場合はどうなりますか? – jarnbjo

答えて

0

終了日に達するまで、日付を1日増分することでこれを行うことができます。各反復で、日が月、火、または水であるかどうかをチェックし、カウンタをインクリメントします。例えば

:あなたはjava.util.Calendarの持つ独自のソリューションを展開でき

final Calendar current = Calendar.getInstance(); 
current.set(2011, 7, 1); 

final Calendar end = Calendar.getInstance(); 
end.set(2011, 7, 31); 

int count = 0; 
while (current.compareTo(end) != 0) { 
    current.add(Calendar.DAY_OF_MONTH, 1); 
    int dayOfWeek = current.get(Calendar.DAY_OF_WEEK); 
    if (dayOfWeek == Calendar.MONDAY || 
     dayOfWeek == Calendar.TUESDAY || 
     dayOfWeek == Calendar.WEDNESDAY) { 
     count++; 
    } 
} 
System.out.println(count); 
+0

あなたの出力は14で、ジェフは15を期待しています。 – jarnbjo

+0

はい、私は知っています。ジェフは開始日の「包括的」にするために調整することができます。 – dogbane

+0

oracleバージョン1.4.2_06 次のエラーが表示されます。 エラー(28,20):メソッドjava.util.CalendarでcompareTo(java.util.Calendar)メソッドが見つかりません –

0

。しかし、私はObjectLab Kitの日付ユーティリティのような既存のライブラリを調べることをお勧めします。

3

Try Joda Timeは、日付と時刻を管理する最適なソリューションです。

修正dogbaneのコード:

final Calendar current = Calendar.getInstance(); 
    current.set(2011, 7, 1); 

    final Calendar end = Calendar.getInstance(); 
    end.set(2011, 7, 31); 
    int count = 0; 
    while (!current.after(end)) { 
     int dayOfWeek = current.get(Calendar.DAY_OF_WEEK); 
     if (dayOfWeek == Calendar.MONDAY || 
      dayOfWeek == Calendar.TUESDAY || 
      dayOfWeek == Calendar.WEDNESDAY) { 
      count++; 
     } 
     current.add(Calendar.DAY_OF_MONTH, 1); 
    } 
    System.out.println(count); 

場合に使用ジョダ時間

DateTime current = new DateTime(2011, 8, 1, 0, 0, 0, 0); 
    DateTime end = new DateTime(2011, 8, 31, 0, 0, 0, 0); 
    int count = 0; 
    while (!current.isAfter(end)) { 

     int dayOfWeek = current.getDayOfWeek(); 
     if (dayOfWeek == DateTimeConstants.MONDAY || dayOfWeek == DateTimeConstants.TUESDAY 
       || dayOfWeek == DateTimeConstants.WEDNESDAY) { 
      count++; 
     } 
     current = current.plusDays(1); 
    } 
    System.out.println(count); 
+0

ありがとう、jonagr、変更されたコードがコンパイルされました。 –

+0

しかし8/1から8/31に入れても、15を返すべきですが、何らかの理由で12を返します。 –

+0

7/1/2011が正しく設定されていないようです。 7月1日は金曜日(6)ですが、Javaカレンダーは月曜日(2)と考えています。私はJoda Timeに精通していません。どうすればこの作業を行うことができますか? –

関連する問題