2011-01-13 15 views
0

私は仕事の途中で立ち往生しています。どうすれば6日間連続して確認できますか?例えば指定日から6日連続で確認するには?

指定された日付がある場合:2011年1月1日

と私は可能な日付のリストから、2011年1月1日から6日間連続してチェックしたいです。 連続した日を見つけた後、それはリスト内で利用可能な次の連続したチェーンを先に進むべきである。

と6日連続して何回発見されたかを記録します。

いずれかが私を助けることができるならば、それは...事前に

おかげで私にとって非常に参考になります。

+0

こんにちは、ジョンSkeetあなたの理解は何か違うが、私は6つの短所を確認したいユーザーが6日連続して存在し、7日目と7日目の両方に残業がある場合、残業とみなされ、利用可能な日付のリストにexisを追加します。 –

+0

あなたの質問を編集して、入力と希望する出力を与えてください。それはあなたを助けることがずっと簡単になります。たとえば、入力がソートされていることが分かっている場合は、差が生じます。 –

答えて

1

は、日付のリストをソート

例えば、これは、日付とそれ以下の6日を反復処理しますあなたのロジックを使用してください

List<Date> dateList = new ArrayList<Date>(); 
    //add your dates here 
    Collections.sort(dateList); 
    int count = 0; 
    Date previousDate = null; 
    List<Date> datesGroup = new ArrayList<Date>(); 
    for (Date date : dateList) { 
     if (previousDate == null) { 
      previousDate = new Date(); 
      count++; 
     } else { 
      long diff = date.getTime() - previousDate.getTime(); 
      if (diff == 86400000) { 
       count++; 
      } else { 
       count = 0; 
       datesGroup.clear(); 
      } 
     } 
     datesGroup.add(date); 
     previousDate.setTime(date.getTime()); 
     if (count == 6) { 
      break; 
     } 
    } 
    for (Date dates : datesGroup) { 
     System.out.println("dates sorted : " + dates); 
    } 
+0

あなたのおかげでこんにちはniksvpありがとう... :) –

+0

@yakub_moriss - :) wc。 – niksvp

0

コードのこの作品は、あなたの日で2つの日付の差を与える:

import java.util.*; 
public class DateDifference { 
    public static void main(String args[]){ 
    DateDifference difference = new DateDifference(); 
    } 
    DateDifference() { 
    Calendar cal1 = new GregorianCalendar(); 
    Calendar cal2 = new GregorianCalendar(); 

    cal1.set(2008, 8, 1); 
    cal2.set(2008, 9, 31); 
    System.out.println("Days= "+daysBetween(cal1.getTime(),cal2.getTime())); 
    } 
    public int daysBetween(Date d1, Date d2){ 
    return (int)((d2.getTime() - d1.getTime())/(1000 * 60 * 60 * 24)); 
     } 
    } 

それは何が必要ないようにするには、あなたのコードに組み込むには何の問題もないはずです。コードはhereから取得されています。

1
Calendar lowerCal = Calendar.getInstance(); 
     lowerCal.set(Calendar.MONTH, 0); 
     lowerCal.set(Calendar.DATE, 1); 
     lowerCal.set(Calendar.YEAR, 2011); 
     //set other param 0 

     Calendar higherCal = Calendar.getInstance(); 
     higherCal.set(Calendar.MONTH, 0); 
     higherCal.set(Calendar.DATE, 1); 
     higherCal.set(Calendar.YEAR, 2011); 
     higherCal.add(Calendar.DATE, 6); 
     //set other param 0 
     Calendar calToCheck = Calendar.getInstance(); 
     if (calToCheck.compareTo(higherCal) <= 0 && calToCheck.compareTo(lowerCal) >= 0){ 
       //YES 
     } 

また、私は私のコメントで言ったように、あなたが本当に後にしているものをクリアしていない

2

を参照してください - しかし、それはほとんど特定ことJoda Timeを使用します標準ライブラリよりもあなたの人生が楽になります。これは、より明確なコードにつながる、より良い日付/時刻APIです。あなたはまた、わずかに異なる方法でこれを書くことができ

LocalDate date = new LocalDate(2010, 1, 1); // January is 1 in Joda. How novel. 
for (int i = 0; i < 7; i++) 
{ 
    // Do something with date here - check it or whatever 
    date = date.plusDays(1); 
} 

LocalDate start = new LocalDate(2010, 1, 1); 
LocalDate end = start.plusDays(7); 
for (LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) 
{ 
    // Do something with date here 
} 
+0

'i <7;' !! 'i <6; –

+0

@ org.life.java:私のコメントを移動した後ではありません。 OPが「現在の日付とそのサブシーケンス6日」(合計7日)をチェックするかどうかによって異なります。 –

関連する問題