2012-02-14 14 views

Respuesta

8

Si desea que el número real de días en un año determinado:

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

Por supuesto, esto devuelve 365 o 366 ... normalmente:.

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

Esto también debería funcionar: '(new LocalDate (year, 12, 31)). GetDayOfYear();' – jpstrube

12

La respuesta que desea no es, obviamente, 365. Es 365 o 366, no tiene en cuenta los años bisiestos en su ejemplo.

Detectar un año bisiesto y simplemente codificarlo duro con una declaración ternaria sería inaceptable por alguna razón?

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

Por supuesto, esto le daría el número de días del año en curso, la forma de obtener el número de días en un año diferente es trivial y un ejercicio para el lector.

2

nueva DateTime() años() .toInterval(). toDuration(). getStandardDays();

3

tl; dr

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

Usando java.time

Joda-Time El proyecto, ahora en maintenance mode, informa la migración a los java.time clases.

La clase java.time.Year puede representar cualquier año en particular.

Year year = Year.of(2017); 

Usted puede interrogar para obtener información acerca de ese año, como su longitud en número de días o si es un Leap Year o no.

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

Sobre java.time

El marco java.time está incorporado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora legacy, como java.util.Date, Calendar, & SimpleDateFormat.

El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a las clases java.time.

Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.

¿Dónde obtener las clases java.time?

  • Java SE 8 y SE 9 y más tarde
    • incorporado.
    • Parte de la API estándar de Java con una implementación integrada.
    • Java 9 agrega algunas características menores y correcciones.
  • Java SE 6 y SE 7
    • Gran parte de la funcionalidad de back-java.time está portado a Java 6 & 7 en ThreeTen-Backport.
  • Android

El proyecto se extiende ThreeTen-Extra java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter y more.

Cuestiones relacionadas