2014-09-24 16 views
11

Sto cercando di ottenere il numero della settimana di un LocalDate completa con il formato:Get Settimana Numero LocalDate (Java 8)

dd.MM.yyy 

non ho trovato una funzione in Java 8 Data API Wich restituisce il numero della settimana e ho provato a creare un algoritmo, ma non ha funzionato.

risposta

20

Un piccolo avviso. Non ho ancora testato questo, ma guardando la documentazione delle API di WeekFields e LocalDate.get, si dovrebbe fare qualcosa di simile:

LocalDate date = ...; 
// Or use a specific locale, or configure your own rules 
WeekFields weekFields = WeekFields.of(Locale.getDefault()); 
int weekNumber = date.get(weekFields.weekOfWeekBasedYear()); 
+4

Attenzione a Locale.getDefault(). In alcuni luoghi (ad esempio in Canada) può restituire una settimana che inizia di domenica. Utilizza "Locale.ISO" per settimane a partire da lunedì. –

+1

Non c'è Locale.ISO, ma c'è 'WeekFields.ISO' –

24

La risposta di Marco Rotteveel è quasi a destra e di nuovo un esempio che tipo di potenziale confusione lì è nella classe WeekFields (nomi di metodi di suono simili, ma che si discostano da un uso civile intuitivo). Il codice di diritto richiede un altro campo:

LocalDate date = LocalDate.now(); 
TemporalField woy = WeekFields.of(Locale.getDefault()).weekOfWeekBasedYear(); 
int weekNumber = date.get(woy); 

Vedere anche il dibattito simile su questo SO-post, in particolare la discussione e le osservazioni circa la risposta di @kleopatra.

+0

Ho aggiornato la mia risposta in base al tuo. Non ho avuto accesso a Java 8 qui, quindi ho dovuto indovinare (e sembra che non ho letto il ['WeekFields'] (http://docs.oracle.com/javase/8/docs/api /java/time/temporal/WeekFields.html) documentazione di classe da vicino, come spiega questa differenza –

+0

@MarkRotteveel OK, ora hai il mio upve ;-) Per me, il nome "weekOfWeekBasedYear" è troppo tecnico e rimane fastidioso . Anche la carta ISO-8601 non contiene questo termine (utilizza solo termini come "settimana del calendario" o "data della settimana"). –

+1

Attento su Locale.getDefault(). In alcuni luoghi (ad esempio in Canada) può restituire una settimana che inizia di domenica. Utilizza "Locale.ISO" per settimane a partire da lunedì. –

Problemi correlati