2012-02-14 11 views

risposta

8

Se si desidera che il numero effettivo di giorni per un determinato anno:

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

Naturalmente, questo restituisce 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

Questo dovrebbe funzionare anche: '(nuovo LocalDate (anno, 12, 31)). GetDayOfYear();' – jpstrube

12

La risposta desiderata non è ovviamente 365. È 365 o 366, non si tiene conto degli anni bisestili nell'esempio.

Rilevare un anno bisestile e limitarsi a codificarlo con una dichiarazione ternaria sarebbe inaccettabile per qualche motivo?

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

Naturalmente questo darebbe il numero di giorni nell'anno in corso, come ottenere il numero di giorni in un anno diverso è banale e un esercizio per il lettore.

2

nuovo DateTime() l'anno() .toInterval() toDuration() getStandardDays()..;

3

tl; dr

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

Uso java.time

Il progetto Joda-Time, ora in maintenance mode, consiglia migrazione ai java.time classi.

La classe java.time.Year può rappresentare un anno particolare.

Year year = Year.of(2017); 

Si può interrogare per informazioni su quello stesso anno, come la sua lunghezza in numero di giorni o se un Leap Year o no.

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

Chi java.time

Il quadro java.time è costruito in Java 8 e versioni successive. Queste classi soppiantare classi legacy date-time vecchi fastidiose come java.util.Date, Calendar, & SimpleDateFormat.

Il progetto Joda-Time, ora in maintenance mode, consiglia la migrazione alle classi java.time.

Per ulteriori informazioni, vedere Oracle Tutorial. E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310.

Dove ottenere le classi java.time?

  • Java SE 8 e SE 9 e successivamente
    • incorporato.
    • Parte dell'API Java standard con un'implementazione in bundle.
    • Java 9 aggiunge alcune funzionalità e correzioni minori.
  • Java SE 6 e SE 7
    • Molte delle funzionalità java.time è di back-porting per Java 6 .
  • Android

Il progetto ThreeTen-Extra java.time prolunga con classi aggiuntive. Questo progetto è un terreno di prova per possibili aggiunte future a java.time. È possibile trovare alcune classi utili come Interval, YearWeek, YearQuarter e more.

Problemi correlati