tl; dr
Come faccio a convertire la stringa qui sopra per unix timestamp?
Instant.parse("2014-09-01T19:22:43.000Z")
.getEpochSecond()
java.time
La classe java.time.Instant
in grado di analizzare la stringa di input con il suo formato standard ISO 8601. Non è necessario specificare un modello di formattazione.
Instant instant = Instant.parse("2014-09-01T19:22:43.000Z");
Per ottenere un conteggio di millisecondi dall'epoca del 1970:
long millisecondsSinceUnixEpoch = instant.toEpochMilli() ;
Per interi secondi dal periodo di 1970-01-01T00: 00: 00Z:
long secondsSinceUnixEpoch = instant.getEpochSecond() ;
Be a conoscenza di possibile perdita di dati quando si passa a millisecondi o interi secondi. Le classi java.time hanno una risoluzione di nanosecondi, quindi qualsiasi microsecondo o nanosecondo presente nel valore verrà troncato.
Joda Time
Aggiornamento Il progetto Joda Time è ora in modalità di manutenzione. Il team consiglia la migrazione alle classi java.time.
La libreria Joda-Time facilita questo lavoro. La stringa compatibile ISO 8601 può essere inviata direttamente a un costruttore Joda-Time. Il parser built-in si aspetta ISO 8601.
DateTime dateTime = new DateTime("2014-09-01T19:22:43.000Z") ;
Unix timestamp
Che cosa si intende per un timestamp Unix? Alcune persone indicano un conteggio di interi secondi dal primo momento del 1970 UTC (Unix epoch) ignorando i secondi bisestili (vedere Unix Time). Alcune persone significano un conteggio di millisecondi o altra risoluzione.
Nota l'uso di una primitiva long
anziché la più comune int
.
Per millisecondi, chiamare getMillis()
.
long millisecondsSinceUnixEpoch = dateTime.getMillis();
Per interi secondi, dividere per 1.000. Considerare se si desidera arrotondare o troncare i secondi frazionari.
Normalmente suggerirei di passare un oggetto DateTimeZone con la stringa al costruttore DateTime. Ma non c'è bisogno se tutto ciò che vuoi è un conteggio dall'epoca.
Chi java.time
Il quadro java.time è costruito in Java 8 e versioni successive. Queste classi soppiantano le fastidiose classi di 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
- versioni successive di implementazioni fascio Android delle classi java.time.
- Per Android precedente, il progetto ThreeTenABP si adatta a ThreeTen-Backport (menzionato sopra). Vedi How to use ThreeTenABP….
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.
FYI, le fastidiose classi di data e ora come ['java.util.Date'] (https://docs.oracle.com/javase/9/docs/api/java/util/Date.html) , ['java.util.Calendar'] (https://docs.oracle.com/javase/9/docs/api/java/util/Calendar.html) e' java.text.SimpleDateFormat' sono ora [legacy] (https://en.wikipedia.org/wiki/Legacy_system), soppiantati dal [java.time] (https://docs.oracle.com/javase/9/docs/api/ java/time/package-summary.html) classi integrate in Java 8 e Java 9. Vedi [Tutorial di Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –