0

こんにちは私はYYYY/MM/DDの形式の日付を含むString[]配列を持っています。この配列を反復処理して、配列内の次の2つの要素に連続した日付が含まれているかどうかを確認したいと思います。もしそうなら、カウント変数を増やすだけです。これが私がこれまでに持っているものです。基本的に、3つの連続した日付があるかどうかをチェックするifステートメントに関してヘルプが必要です。

int count = 0;

String[] dates = { 
        "2004/1/23", "2004/1/24", "2004/1/25",
        "2004/1/26", "2004/1/29", "2004/2/11", 
        "2004/2/17", "2004/2/18", "2004/2/18", "2004/3/7"};

for(int i = 0; i < dates.length-2; i++){

    //Help needed here! If i, i+1 and i+2 are consecutive...
    if(...){
        count++;
    }
}

比較する前に、文字列の日付を実際のDateオブジェクトに変換する必要があるかもしれないことに気づきました。さらなるガイダンスをいただければ幸いです。ありがとう

4

4 に答える 4

6

に変換String[]しますDate[](つまり、Date配列を準備します)。あなたはすでにこれを行う方法を知っていると思います。

これで、次のような方法で連続した日付を確認できます。

Calendar c = Calendar.getInstance();
int numConsecutive = 0;
Date last = null;

for (int i = 0; i < dates.length; i++) {
    c.setTime(dates[i]);
    c.add(Calendar.DATE, -1);
    if (c.getTime().equals(last)) {
        numConsecutive++;
    } else {
        numConsecutive = 0;
    }
    if (numConsecutive == 2) {
        numConsecutive = 0;
        count++;
    }
    last = dates[i];
}
于 2013-03-04T21:27:09.303 に答える
2
于 2017-06-06T01:49:22.790 に答える
0

こんにちは、2つの日付の間の秒数を計算してから、日数に変換する必要があります。

import java.util.*;  
class DateDiff  
{  
    public static void main(String [] args)  
    {  
        Calendar c1=Calendar.getInstance();  
        c1.set(2011,5, 29 );  
        Calendar c2=Calendar.getInstance();  
        c2.set(2012,5,30);  

        Date d1=c1.getTime();  
        Date d2=c2.getTime();  

        long diff=d2.getTime()-d1.getTime();  
        int noofdays=(int)(diff/(1000*24*60*60));  
        System.out.println(noofdays);  
    }  
}  
于 2013-03-04T21:17:07.500 に答える
0
@Test
public void threeConsecutiveDates() throws ParseException {
    List<Date> consecutive = new ArrayList<>();
    consecutive.add(new Date(0));
    final SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");

    String[] dates = {
            "2004/1/23", "2004/1/24", "2004/1/25",
            "2004/1/26", "2004/1/29", "2004/2/11",
            "2004/2/17", "2004/2/18", "2004/2/18", "2004/3/7"};
    for (String s : dates) {
        Date previous = consecutive.get(consecutive.size()-1);
        Date current = format.parse(s);
        if(previous.before(current) && (current.getTime()-previous.getTime() == 1000 * 60 * 60 * 24)) {
            consecutive.add(current);
        } else {
            consecutive.clear();
            consecutive.add(current);
        }
        if(consecutive.size() == 3) {
            break;
        }
    }
    System.out.println("consecutive = " + consecutive);
}
于 2013-03-04T21:34:41.247 に答える