2017-10-15 2 views
-4

두 날짜 사이의 일수 계산을 위해 웹에서 코드를 복사했습니다. 종종 잘못된 결과를 산출합니다. 예를 들어, 01/15/2008에서 03/15/2010 사이의 날짜는 790입니다.이 코드는 789를 반환합니다. 2013 년 12 월 30 일과 02/28/2017 사이의 날짜는 1156입니다. 코드는 1152를 반환합니다. 오류가 있습니까? 코드 또는 캘린더 클래스로 인해? 아래 코드를 복사하고 있습니다. 이것은 첫 번째 게시물이며 모든 프로토콜 오류에 대해 사과드립니다. 감사합니다, 닉자바 캘린더 클래스

import java.util.Calendar; 

public class DateExperiment2 
{ 
    public static void main(String args[]) throws Exception 
    { 
    // Create Calendar instances 
    Calendar calendar1 = Calendar.getInstance(); 
    Calendar calendar2 = Calendar.getInstance(); 

    // Set the values for the calendar fields YEAR, MONTH, and DAY_OF_MONTH. 
    calendar1.set(2008, 1, 15); 
    calendar2.set(2010, 3, 15); 

    //Get Calendars' time value in milliseconds 
    long miliSecondForDate1 = calendar1.getTimeInMillis(); 
    long miliSecondForDate2 = calendar2.getTimeInMillis(); 

    // Calculate the difference in millisecond between two dates 
    long diffInMilis = miliSecondForDate1 - miliSecondForDate2; 

    //Convert milliseconds to days 
    long diffInDays = diffInMilis/(24 * 60 * 60 * 1000); 

    System.out.println(diffInDays); 
    } 
} 
+1

이것을 줄이십시오. ~ [mcve]. 스윙 UI 나 isValidDateStr 또는 변수 a-f는 필요하지 않습니다. 단지'set'에 대한 호출을 하드 코딩해야합니다. 별개의 문제로서 실제로'java.util.Calendar'를 사용할 필요가 있습니까? 대신 java.time.LocalDate를 사용하는 것이 좋습니다. –

+0

감사합니다. 이것은 나의 첫 번째 게시물이었다. 앞으로 귀하의 지침을 사용하겠습니다. 그러나 문제는 여전히 남아 있습니다. Calendar 클래스가 잘못된 결과를 반환합니까? – Nick

+0

다음 질문을 기다릴 필요가 없습니다. 이 문서를 올바른 모양으로 편집해야합니다. 그러면 도움이 될뿐만 아니라 향후 독자에게 더 유용합니다. –

답변

0

결과와는 좋은 그러나 당신은 당신이 캘린더에 월 0

에서 시작 2000년 2월 15일에 설정 즉, 01

`Calendar.Set(2000,1,15)` 

에 달 설정할 때

0 = 1 월 1 = 2 월 ...