tl; dr
LocalDate.parse(
"01-23-2017" ,
DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
)
Dettagli
Ho un java.util.Date nel formato aaaa-mm-gg
Come altri accennato, la Date
classe non ha formato. Ha un conteggio di millisecondi dall'inizio del 1970 in UTC. Senza obblighi.
java.time
Le altre Risposte utilizzano vecchie e problematiche classi data-ora legacy, ora soppiantate dalle classi java.time.
Se hai un java.util.Date
, converti in un Instant
oggetto. La Instant
classe rappresenta un momento sulla sequenza temporale in UTC con una risoluzione di nanosecondi (fino a nove (9) cifre di una frazione decimale).
Instant instant = myUtilDate.toInstant();
Fuso orario
Le altre risposte ignorano la questione cruciale del fuso orario. La determinazione di una data richiede un fuso orario. Per ogni momento, la data varia in tutto il mondo in base alla zona. Pochi minuti dopo la mezzanotte a Parigi Francia è un nuovo giorno, mentre ancora “ieri” a Montréal Québec.
Definisci il fuso orario in base al quale desideri il contesto per il tuo Instant
.
ZoneId z = ZoneId.of( "America/Montreal" );
Applicare ZoneId
per ottenere un file ZonedDateTime
.
ZonedDateTime zdt = instant.atZone( z );
LocalDate
Se ti interessa solo la data senza l'ora del giorno, estrai un file LocalDate
.
LocalDate localDate = zdt.toLocalDate();
Per generare una stringa nel formato standard ISO 8601, AAAA-MM-GG, è sufficiente chiamare toString
. Le classi java.time utilizzano i formati standard per impostazione predefinita durante la generazione / analisi delle stringhe.
String output = localDate.toString();
2017-01-23
Se desideri un formato MM-GG-AAAA, definisci un modello di formattazione.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
String output = localDate.format( f );
Tieni presente che i codici del modello di formattazione fanno distinzione tra maiuscole e minuscole. Il codice nella domanda utilizzato in modo errato mm
(minuto dell'ora) anziché MM
(mese dell'anno).
Usa lo stesso DateTimeFormatter
oggetto per l'analisi. Le classi java.time sono thread-safe, quindi puoi tenere questo oggetto in giro e riutilizzarlo ripetutamente anche attraverso i thread.
LocalDate localDate = LocalDate.parse( "01-23-2017" , f );
Informazioni su java.time
Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidiosi legacy classi data-time come java.util.Date
, Calendar
, e SimpleDateFormat
.
Il progetto Joda-Time , ora in modalità di manutenzione , consiglia la migrazione alle classi java.time .
Per saperne di più, vedere il tutorial Oracle . 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 versioni successive
- Built-in.
- Parte dell'API Java standard con un'implementazione in bundle.
- Java 9 aggiunge alcune funzionalità e correzioni minori.
- Java SE 6 e SE 7
- Gran parte delle funzionalità java.time sono portate indietro a Java 6 e 7 in ThreeTen-Backport .
- Android
Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili future aggiunte a java.time. Si possono trovare alcune classi utili, come per esempio Interval
, YearWeek
, YearQuarter
e altro .