tl; dr
LocalDateTime.parse(
"2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )
java.time
Usa le eccellenti classi java.time per il lavoro data-ora. Queste classi sostituiscono le fastidiose classi data-ora come java.util.Date
e java.util.Calendar
.
ISO 8601
Le classi java.time utilizzano i formati ISO 8601 standard per impostazione predefinita per l'analisi / la generazione di stringhe di valori di data e ora. Per rendere conforme la stringa di input, sostituire lo SPAZIO al centro con un T
.
String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );
LocalDateTime
Analizza la tua stringa di input LocalDateTime
come se mancasse di informazioni sul fuso orario o sull'offset da UTC.
LocalDateTime ldt = LocalDateTime.parse( inputModified );
Aggiungi dieci minuti.
LocalDateTime ldtLater = ldt.plusMinutes( 10 );
ldt.toString (): 2016-01-23T12: 34
ldtLater.toString (): 2016-01-23T12: 44
Guarda il codice live su IdeOne.com .
Non LocalDateTime
ha fuso orario, quindi non rappresenta un punto sulla sequenza temporale. Applica un fuso orario per tradurre in un momento reale. Specificare un nome proprio fuso orario nel formato continent/region
, come ad esempio America/Montreal
, Africa/Casablanca
o Pacific/Auckland
, o Asia/Karachi
. Non usare mai il 3-4 lettera sigla come EST
o IST
o PKT
come sono non fusi orari veri e propri, non standardizzati, e nemmeno unico (!).
ZonedDateTime
Se conosci il fuso orario previsto per questo valore, applica a ZoneId
per ottenere un ZonedDateTime
.
ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );
zdt.toString (): 2016-01-23T12: 44 + 05: 00 [Asia / Karachi]
anomalie
Pensa se aggiungere quei dieci minuti prima o dopo aver aggiunto un fuso orario. È possibile ottenere un risultato molto diverso a causa di anomalie come l'ora legale (DST) che spostano l' ora dell'orologio da parete .
La necessità di aggiungere i 10 minuti prima o dopo l'aggiunta della zona dipende dal significato dello scenario e delle regole aziendali.
Suggerimento: quando intendi un momento specifico sulla sequenza temporale, mantieni sempre le informazioni sul fuso orario . Non perdere queste informazioni, come fatto con i tuoi dati di input. Il valore 12:34
deve essere mezzogiorno in Pakistan o mezzogiorno in Francia o mezzogiorno in Québec? Se intendevi mezzogiorno in Pakistan, dillo includendo almeno l'offset da UTC ( +05:00
) e, meglio ancora, il nome del fuso orario ( Asia/Karachi
).
Instant
Se vuoi lo stesso momento visto attraverso l'obiettivo di UTC , estrai un file Instant
. 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 = zdt.toInstant();
Convertire
Evita le fastidiose lezioni di data e ora quando possibile. Ma se devi, puoi convertirti. Chiama nuovi metodi aggiunti alle vecchie classi.
java.util.Date utilDate = java.util.Date.from( instant );
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 a 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 .
- androide
- Il progetto ThreeTenABP adatta ThreeTen-Backport (menzionato sopra) per Android in modo specifico.
- Vedi come usare… .
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 .