TL; DR
- 는에 먼저 해의 시작 날짜를 이동합니다.
- 의 첫 번째 날짜로 끝나는 날짜를 년 뒤에 이동하십시오.
반 공개
Joda 타임이 시작은 포함 인 시간의 스팬에 반 열림 방식을 사용하고 결말이 독점입니다. 따라서 1 년은 해당 연도의 1 월 1 일부터 시작하여 다음 해 1 월 1 일까지 실행되지만 포함되지 않습니다.
2016-2017의 날짜를 2 년으로 지정하려면 시작일을 연초 첫날로 이동하고 의 첫 해로 끝내는 날짜를 연도 다음으로 이동하십시오.
LocalDate
으로 변환합니다. 우리는이 계산을 위해 시간을 신경 쓰지 않기 때문에.
LocalDate start = startDate.toLocalDate().withDayOfMonth(1).withMonthOfYear(1); // Move to first of same year.
LocalDate stop = endDate.toLocalDate().withDayOfMonth(1).withMonthOfYear(1).plusYears(1); // Move to first of *following* year.
그런 다음 Years
과 같은 계산을 수행하십시오. 2016의 모든 날짜 2
에서
Years yearsBetween = Years.yearsBetween(start , stop); // Half-Open, beginning is inclusive while ending is exclusive.
int years = yearsBetween.getYears(); // Plain integer.
결과 (2018년 1월 1일로 이동) 및 2017 (2016년 1월 1일로 이동).
java.time
참고는 Joda-Time 프로젝트는 java.time 클래스로 마이그레이션을 조언 팀과 함께, maintenance mode에 지금이다.
이 작품은 java.time에서 조금 더 간단합니다. TemporalAdjuster
인터페이스는 클래스가 날짜 - 시간 값을 조작하도록 제공합니다. TemporalAdjusters
클래스 (복수참고)는 몇 가지 구현을 제공합니다. 이것들은 올해의 첫 번째와 내년의 첫 번째를 얻는 것을 제공합니다.
여기에 Zdt
으로, 나는 당신이 가진 ZonedDateTime
개체를 참조합니다. 이 클래스는 해상도가 나노초 인 특정 시간대 (ZoneId
)의 타임 라인에서 한 순간을 나타냅니다. ZonedDateTime
개체에서 LocalDate
으로 변환 한 다음 TemporalAdjuster
개체 쌍을 적용하여 첫 해와 다음 해로 이동합니다.
LocalDate start = yourStartingZdt.toLocalDate().with(TemporalAdjusters.firstDayOfYear());
LocalDate stop = yourEndingZdt.toLocalDate().with(TemporalAdjusters.firstDayOfNextYear());
java.time 클래스는 Joda 타임 Years
클래스의 해당 포함되지 않습니다. 원하는 경우 클래스를 포함하는 추가 클래스로 java.time을 확장하기 위해 ThreeTen-Extra 프로젝트를 앱에 추가 할 수 있습니다.
또는 Period
클래스를 통해 연도 수를 구할 수 있습니다.
Joda-Time과 마찬가지로 Period
을 포함한 java.time 클래스는 Half-Open 방식을 사용하여 시간을 측정합니다. Half-Open을 사용하면 모든 날짜 - 시간 작업에서 일관되게 사용하는 것이 좋습니다. 코드가 모두 단순하고 오류가 발생하기 쉽습니다. 2016의 모든 날짜 2
에서
Period p = Period.between(start , stop);
int years = p.getYears();
결과 (2018년 1월 1일로 이동) 및 2017 (2016년 1월 1일로 이동).
java.time 프레임 워크 나중에 자바 8에 내장되어 java.time 소개
Joda-Time 프로젝트는 지금 maintenance mode에, java.time로 마이그레이션을 조언한다.
자세히 알아 보려면 Oracle Tutorial을 참조하십시오. 그리고 많은 예제와 설명을 위해 스택 오버플로를 검색하십시오. 사양은 JSR 310입니다.
어디에서 java.time 클래스를 얻을 수 있습니까?
ThreeTen-Extra 프로젝트는 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 가능성을 입증합니다.여기에 Interval
, YearWeek
, YearQuarter
및 more과 같은 유용한 클래스가 있습니다.
endDate에 1 년 빼기를 추가 할 수 있습니다. –
간단한 계산 만 사용하면 어떨까요? \t \t'int years = (int) Math.ceil ((double) Days.daysBetween (startDate, endDate) .getDays()/365);' – asdf