2017-12-11 7 views
2

LocalDate이 자바로 된 사이의 일 수를 계산하는 방법은 무엇입니까? 내가 어떻게 두 날짜 포함을 계산하는 두 날짜 사이에 위의 모든주는 일이주어진 두 날짜를 포함하여 일수를 계산하십시오.

LocalDate startDate = LocalDate.parse("2016-11-02"); 
LocalDate endDate = LocalDate.parse("2016-11-04"); 

long days = startDate.until(endDate, ChronoUnit.DAYS); 

//and 

long days= ChronoUnit.DAYS.between(startDate, endDate); 

//and 

long days= Duration.between(startDate.atStartOfDay(), endDate.atStartOfDay()).toDays(); 

같은 시도했지만. 위의 단계에 따라 2 일을 아니오로 지정하십시오. 일, 그러나 3 일을 요구했다. 당신은 문자 그대로 24 시간 일을 원하는 경우에

+0

java.time.Duration을 사용하는 것이 더 좋습니다. –

+0

[두 Java date 인스턴스 간의 차이 계산] (https://stackoverflow.com/questions/1555262/calculating-the-difference-between-two- java-date-instances) –

+1

주어진 날짜 두 개 포함 - 1을 더하는 문제가 아닙니까 ?? 'Duration'에는 이것을 수행 할 plusDays 메소드가 있습니다. –

답변

2

, 당신은 대신 Duration 클래스를 사용할 수 있습니다 :

long days = Duration.between(startDate.atStartOfDay(), endDate.atStartOfDay()).toDays() + 1; 

자세한 내용은 자바 SE 8 날짜 및 시간에 대한 this document를 참조하십시오.

+1

두 날짜를 모두 포함하려면 +1을 추가해야한다고 생각합니다. between은 다음과 같이 정의됩니다 :'between (임시 시작 값, 임시 최종 값)' – Eritrean

+0

방금 ​​내 대답을 업데이트했습니다. 감사합니다 @Eritrean –

2

The javadoc 최종 날짜가 계산에 포함되어 있지 않음이 분명합니다. 그래서 당신은 단순히 하나를 추가 할 수 있습니다

long days = ChronoUnit.DAYS.between(startDate, endDate) + 1; 
1

TL; DR

포함되는, 시간의 기간에 독점되는 끝나는 시작을 규범입니다.

이 접근법을 절대 수행 할 수없는 경우 추가하십시오.

days = days + 1 ; 

반 공개

시간의 범위를 정의하는 일반적인 현명한 방법

은 절반 공개 접근 방법이다. 처음은 ( 포함)이며 끝은 ()입니다.

때로는 항상 그런 것은 아니지만, 우리는이 접근법을 일상 생활에서 직관적으로 사용합니다. 예를 들어, 교실의 점심 시간은 오후 1 시부 터 정오라고합니다. 즉, 모든 학생들은 반으로 돌아가서 앞에 클래스가 13시에 도착하기 전에 준비해야합니다. 수업은 오후 1 시부 터 오후 2 시까 지 진행됩니다. 그래서 스팬은 서로 겹치지 않고 그리고 그 시간의 마지막 순간의 무한하게 나눌 수있는 마지막 순간을 결정하는 까다로운 작업없이 서로 닿을 수 있습니다.

이 방식을 사용하면 모든 날짜/시간 코드에서 코드를 읽기 쉽고 디버깅하기 쉬우 며 포괄적 인 모호성을 해결할 때 인식 과부하를 줄여 오류 발생 가능성을 줄일 수 있습니다.

java.time 클래스는 전반적으로 Half-Open 방식을 사용합니다.

long days = ChronoUnit.DAYS.between(start , stop) ; // Half-open 

코드에 엔딩 포함 결과를 반환해야하는 경우 java.time 결과에 하나만 추가하면됩니다. 모호함의 문제에 관해서는 사용자를 교육하면서

long daysClosed = (days + 1) ; 

이상적으로 당신은 당신의 코드와 사용자 인터페이스에서 지속적으로 반 공개 사용할 수 있습니다. 사업주가 실수로 만든 날짜 범위가 (), 닫힌 [] 또는 반 오픈 [)이고, 심지어 반대쪽이 (] 인 것을 가정하여 실수로 수많은 실수를 저지른 것을 보았습니다.

관련 문제