tl; dr
YearWeek.of(LocalDate.parse("2017-01-23"))
.getWeek() // and .getYear()
ISO 8601 settimana standard
Se si desidera che lo standard ISO 8601 week, piuttosto che una definizione localizzata di una settimana, utilizzare la classe YearWeek
trovato nel progetto ThreeTen-Extra che aggiunge funzionalità alle classi java.time integrate in Java 8 e versioni successive.
ISO-8601 definisce la settimana come sempre a partire dal lunedì. La prima settimana è la settimana che contiene il primo giovedì dell'anno solare. Pertanto, l'anno della settimana utilizzato in questa classe non coincide con l'anno solare.
In primo luogo, ottenere la data di oggi. La classe LocalDate
rappresenta un valore di sola data senza ora del giorno e senza fuso orario.
Un fuso orario è fondamentale per determinare una data. Per un dato momento, la data varia in tutto il mondo per zona. Ad esempio, pochi minuti dopo la mezzanotte in Paris France è un nuovo giorno mentre è ancora "ieri" in Montréal Québec.
Specificare un proper time zone name nel formato continent/region
, come ad esempio America/Montreal
, Africa/Casablanca
o Pacific/Auckland
. Non utilizzare mai l'abbreviazione di 3-4 lettere come EST
o IST
poiché sono non fusi orari reali, non standardizzati e nemmeno univoci (!).
ZoneId z = ZoneId.of("America/Montreal");
LocalDate today = LocalDate.now(z);
Oppure lasciare che l'utente specifichi una data digitando una stringa. L'input della stringa di analisi di una data viene trattato in molte altre domande e risposte. Il modo più semplice è che l'utente utilizzi il formato ISO 8601 standard, YYYY-MM-DD come 2017-01-23
.
LocalDate ld = LocalDate.parse("2017-01-23") ;
Per altri formati, specificare un DateTimeFormatter
per l'analisi. Ricerca overflow dello stack per molti molti esempi di utilizzo di quella classe.
DateTimeFormatter f = DateTimeFormatter.ofPattern("d/M/uuuu" , Locale.US) ;
LocalDate ld = LocalDate.parse("1/23/2017" , f) ;
Ottenere il YearWeek
.
YearWeek yw = YearWeek.of(ld) ;
per creare una stringa, è possibile utilizzare il standard ISO 8601 format for year-week, aaaa-WWW come 2017-W45
. Oppure puoi estrarre ogni numero.
YearWeek::getWeek
- Ottiene il campo dell'anno della settimana della settimana.
YearWeek::getYear
- Ottiene il campo relativo alla settimana.
Chi java.time
Il quadro java.time è costruito in Java 8 e versioni successive. Queste classi soppiantano le fastidiose classi data legacy 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, Java SE 9, e più tardi
- incorporato.
- Parte dell'API Java standard con un'implementazione in bundle.
- Java 9 aggiunge alcune funzionalità e correzioni minori.
- Java SE 6 e Java 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.
Bisogna analizzare l'ingresso con un formato specificato. Questo potrebbe aiutare: http://stackoverflow.com/questions/3386520/parse-date-from-string-in-this-format-dd-mm-yyyy-to-dd-mm-yyyy –
FYI, la vecchia data fastidiosa -time classes come ['java.util.Date'] (https://docs.oracle.com/javase/8/docs/api/java/util/Date.html), [' java.util.Calendar' ] (https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html) e 'java.text.SimpleTextFormat' sono ora [legacy] (https: //en.wikipedia .org/wiki/Legacy_system), soppiantato dalle classi [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html). Vedi [Tutorial di Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –