2012-02-14 3 views

답변

8

주어진 년 일의 실수하려면 : 물론

int year = 2012; 
LocalDate ld = new LocalDate(year,1,1); 
System.out.println(Days.daysBetween(ld,ld.plusYears(1)).getDays()); 

,이 (366) 365 반환 또는 ... 보통 :.

int year = 1582; 
LocalDate ld = new LocalDate(year,1,1,GJChronology.getInstance()); 
System.out.println(Days.daysBetween(ld,ld.plusYears(1)).getDays()); 
// year 1582 had 355 days 
+0

이렇게하면됩니다 :'(new LocalDate (year, 12, 31)). getDayOfYear();' – jpstrube

12

당신이 원하는 대답은 분명 365 없습니다. 365 또는 366 일 경우, 예를 들어 윤년을 고려하지 않습니다.

윤년을 감지하고 삼중 구문으로 하드 코딩하는 것은 어떤 이유로 용납 될 수 없습니까?

final DateTime dt = new DateTime(); 
final int daysInYear = dt.year().isLeap() ? 366 : 365; 

은 물론이 당신에게 현재 연도의 일 수를 줄 것이다, 다른 해에 일의 수를 얻는 방법 사소한 독자를위한 운동.

2

새로운 날짜 시간을() 년() .toInterval(). toDuration(). getStandardDays();

3

TL; DR

java.time.Year.of(2017).length() 

사용 java.time

Joda-Time 프로젝트에서 현재 maintenance modejava.time 클래스 이주를 권장합니다.

java.time.Year 클래스는 특정 연도를 나타낼 수 있습니다.

Year year = Year.of(2017); 

당신은 일의 수의 길이 또는 그것 Leap Year 여부 그 해에 대한 정보를 심문 할 수있다. java.time

소개

int countDaysInYear = year.length() ; 
boolean isLeapYear = year.isLeap() ; // ISO proleptic calendar system rules. 

java.time 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 java.util.Date, Calendar, & SimpleDateFormat과 같이 문제가있는 이전 legacy 날짜 - 시간 클래스를 대체합니다.

maintenance mode에있는 Joda-Time 프로젝트는 java.time 클래스로의 마이그레이션을 권장합니다.

자세히 알아 보려면 Oracle Tutorial을 참조하십시오. 그리고 많은 예제와 설명을 위해 스택 오버플로를 검색하십시오. 사양은 JSR 310입니다.

어디에서 java.time 클래스를 얻을 수 있습니까?

  • Java SE 8SE 9 이후
    • 내장한다.
    • 번들로 구현 된 표준 Java API의 일부입니다.
    • Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
  • Java SE 6 및 java.time 기능의 대부분
  • Android

ThreeTen-Extra 프로젝트는 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 가능성을 입증합니다. 여기에 Interval, YearWeek, YearQuartermore과 같은 유용한 클래스가 있습니다.

관련 문제