2017-09-07 10 views
-3

/** date1がdate2より早く来たかどうかを報告します。たとえば、isEarlierThan( "12-01-2015"、 "02-15-2017")はtrueですが、isEarlierThan( "10-11-2016"、 "10-11-2016")およびisEarlierThan( "09-09 -1967 "、" 02-15-1933 ")はfalseです。 */オブジェクトを使用せずに2つの日付を比較するにはどうすればよいですか?

public static boolean isEarlierThan (String date1, String date2) 

{ 
    if(date1.compareTo(date2) > 0) { 
     return true; 
    } 
    else if (date1.compareTo(date2) <= 0) { 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

このコードは、時にはしかし、誰常に動作します。私はテストケースを実行して失敗します。以下のテストケースがあります。

public void testIsEarlierThan() 
{ 
    assertTrue(isEarlierThan("12-01-2015", "02-15-2017")); 
    assertFalse(isEarlierThan("10-11-2016", "10-11-2016")); 
    assertFalse(isEarlierThan("09-09-1967", "02-15-1933")); 
    assertTrue(isEarlierThan("02-14-2017", "02-15-2017")); 
} 

私がテストケースを実行すると、最初の2つだけが動作し、3番目のテストケースでは停止します。しかし、何が間違っているのか分かりません。もし最初の作品がうまくいけば3番目の作品はうまくいかないでしょうか?前もって感謝します!

+0

これは文字列比較の仕組みであるため、第3の例では「9」は「2」の後になります –

+2

なぜですか? 'Date.compareTo()'がすでに動作していますか?これはしない?できない?オブジェクトを使うことに対するあなたの嫌悪感は何ですか? – EJP

+0

ああ.... 12時は02後ですね。 – SassyRegards201

答えて

0

私自身の質問に答える。そして誰かが似たような質問をしているなら、将来の参照のために。

public static boolean isEarlierThan (String date1, String date2) 
{ 

    String month1 = date1.substring(0, 2); 
    String month2 = date2.substring(0, 2); 

    String day1 = date1.substring(3, 5); 
    String day2 = date2.substring(3, 5); 

    String year1 = date1.substring(6, 10); 
    String year2 = date2.substring(6, 10); 

    date1 = year1 + month1 + day1; // + month1 + day1 
    date2 = year2 + month2 + day2; // + month2 + day2 

    if (date1.compareTo(date2) < 0) 
    { 
     return true; 
    } 
    else if (date1.compareTo(date2) > 0) 
    { 
     return false; 
    } 
    else 
    { 
     return false; 
    } 
} 

基本的に私は2つの日付を取り、1年、1ヶ月、1日に分ける方法があります。それから私はそれらを比較するときにdate1がdate2の前にあれば真、もう一度date1がdate2の後にあればfalseを出力するように、それらを別の順序で戻します。

関連する問題