tl; dr
Usa la java.time.Instant
classe per analizzare il testo in formato ISO 8601 standard, che rappresenta un momento in UTC.
Instant.parse( "2010-10-02T12:23:23Z" )
ISO 8601
Tale formato è definito dallo standard ISO 8601 per i formati di stringa data-ora.
Tutti e due:
... usa i formati ISO 8601 per impostazione predefinita per l'analisi e la generazione di stringhe.
Dovresti generalmente evitare di usare le vecchie classi java.util.Date /.Calendar & java.text.SimpleDateFormat poiché sono notoriamente problematiche, confuse e imperfette. Se necessario per l'interoperabilità, è possibile convertire avanti e indietro.
java.time
Integrato in Java 8 e versioni successive è il nuovo framework java.time . Ispirato da Joda-Time , definito da JSR 310 , e ampliato dal progetto ThreeTen-Extra .
Instant instant = Instant.parse( "2010-10-02T12:23:23Z" ); // `Instant` is always in UTC.
Converti nella vecchia classe.
java.util.Date date = java.util.Date.from( instant ); // Pass an `Instant` to the `from` method.
Fuso orario
Se necessario, è possibile assegnare un fuso orario.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Define a time zone rather than rely implicitly on JVM’s current default time zone.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ); // Assign a time zone adjustment from UTC.
Convertire.
java.util.Date date = java.util.Date.from( zdt.toInstant() ); // Extract an `Instant` from the `ZonedDateTime` to pass to the `from` method.
Joda-Time
AGGIORNAMENTO: il progetto Joda-Time è ora in modalità manutenzione. Il team consiglia la migrazione alle classi java.time .
Ecco alcuni esempi di codice in Joda-Time 2.8.
org.joda.time.DateTime dateTime_Utc = new DateTime( "2010-10-02T12:23:23Z" , DateTimeZone.UTC ); // Specifying a time zone to apply, rather than implicitly assigning the JVM’s current default.
Converti in vecchia classe. Si noti che il fuso orario assegnato viene perso durante la conversione, poiché juDate non può essere assegnato a un fuso orario.
java.util.Date date = dateTime_Utc.toDate(); // The `toDate` method converts to old class.
Fuso orario
Se necessario, è possibile assegnare un fuso orario.
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTime_Montreal = dateTime_Utc.withZone ( zone );
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à manutenzione , consiglia la migrazione alle classi java.time .
Per saperne di più, consulta il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .
Puoi scambiare oggetti java.time direttamente con il tuo database. Utilizzare un driver JDBC conforme a JDBC 4.2 o successivo. Non c'è bisogno di stringhe, non c'è bisogno di java.sql.*
classi.
Dove ottenere le classi java.time?
- Java SE 8 , Java 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 Java SE 7
- Gran parte della funzionalità java.time è trasferita su Java 6 e 7 in ThreeTen-Backport .
- androide
- Versioni successive di implementazioni di bundle Android delle classi java.time.
- Per precedenza Android (<26), il ThreeTenABP progetto si adatta ThreeTen-Backport (di cui sopra). Vedi Come usare ThreeTenABP… .
Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili aggiunte future a java.time. Si possono trovare alcune classi utili, come per esempio Interval
, YearWeek
, YearQuarter
e altro .