4

与えられた2つの日付の間の日数を計算するタスクが与えられ、入力行3の非常に奇妙な結果(2127日)が正しいように見えますが、このタスクに期待される与えられた出力は異なる結果です(1979日々)。私はこの投稿を見て、2つの日付の間の日数を、ここにある他のいくつかの投稿と一緒に計算し、アドバイスに従ってJodaライブラリを使用して、2127日の結果を取得しました。

*問題:2つの日付(1901年と2999年を含む)が与えられた場合、2つの日付の間の日数を見つけます。

入力:6セットのデータ。各セットには、月、日、年の形式で2つの日付があります。たとえば、入力行「6、2、1983、6、22、1983」は、1983年6月2日から1983年6月22日までを表します。

出力:開始日と終了日を除く、指定された日付間の日数。たとえば、1983年6月2日から1983年6月22日までの間に19日があります。つまり、6月3日、4日、...、21日。

サンプル入力(3セット):

 Input Line #1:  6, 2, 1983, 6, 22, 1983
 Output #1:  19

Input Line #2:  7, 4, 1984, 12, 25, 1984
 Output #2:  173

 Input Line #3:  1, 3, 1989, 3, 8, 1983
 Output #3:  1979 

これが私の解決策です

private boolean isYearValid(int year){
    return year >=1901 && year <= 2999;
}

public int numOfDays(String dates){
    Calendar date1 = new GregorianCalendar();
    Calendar date2 = new GregorianCalendar();
    String [] dateSplit = dates.split(",");
    int len = dateSplit.length;
    int year = 0;
    for(int i=0;i<len;i++){
        dateSplit[i]=dateSplit[i].trim();
        if(i==2||i==5){
            try {
                year = Integer.parseInt(dateSplit[i]);
            }
            catch (NumberFormatException e){
                throw new IllegalArgumentException(String.format("Usage: Year input %s is not valid",dateSplit[i]));
            }
            if(!isYearValid(year))
                throw new IllegalArgumentException("Usage: Year of date should be between the years 1901 and 2999, inclusive");
        }
    }
    int [] d = new int[6];

    for(int i=0;i<6;i++)
        try {
            d[i]=Integer.parseInt(dateSplit[i]);
        }
    catch(NumberFormatException e){
        throw new IllegalArgumentException("Usage: Date entered is not valid");
    }
    date1.set(d[2], d[0],d[1]);
    date2.set(d[5], d[3], d[4]);
    long milli1= date1.getTimeInMillis();
    long milli2 = date2.getTimeInMillis();
    long diff;
    if(milli1>milli2){
        diff = milli1 - milli2;
    }
    else{
        diff = milli2 - milli1;
    }
    return (int) (diff / (24 * 60 * 60 * 1000))-1;
}

1, 3, 1989, 8, 3, 1983解決済み- 1979日を生成して以来、テストデータが間違っていたようです。

4

2 に答える 2

2

テストデータが正しくありません。http://www.timeanddate.com/date/durationresult.htmlを参照してください。

于 2012-07-17T19:55:23.933 に答える
2

好奇心から、これは宿題ですか?そうでない場合は、これを行うJoda-Timeライブラリを使用してみませんか。月の長さ、うるう年などを処理します。

    DateTime dt1 = ...;
    DateTime dt2 = ...;
    Duration duration = new Duration(dt1, dt2);
    long days = duration.getStandardDays();
于 2012-07-17T20:44:57.003 に答える