2017-09-07 6 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 ")는 거짓입니다. */개체를 사용하지 않고 두 날짜를 비교하는 방법은 무엇입니까?

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")); 
} 

테스트 케이스를 실행할 때 처음 두 개만 작동하고 세 번째 테스트 케이스에서는 멈 춥니 다. 하지만 뭐가 잘못 됐는지 이해하지 못해? 첫 번째 작품은 세 번째 작품이 잘 작동해서는 안됩니까? 미리 감사드립니다!

+0

이것은 문자열 비교가 작동하는 방식이기 때문에 세 번째 예제에서 '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; 
    } 
} 

기본적으로 나는 두 개의 날짜를 취하는 방법을 사용하여 1 년, 1 개월 및 1 일로 구분합니다. 그런 다음 서로 다른 순서로 다시 배치하여 비교할 때 date1이 date2보다 큰 경우 true를 표시하고 date1이 date2보다 작거나 같은 경우 false를 인쇄합니다.