Unix epoch time di Java Data oggetto
Domanda
Ho una stringa contenente il UNIX Epoch , e ho bisogno di convertirlo in un Java Data oggetto.
String date = "1081157732";
DateFormat df = new SimpleDateFormat(""); // This line
try {
Date expiry = df.parse(date);
} catch (ParseException ex) {
ex.getStackTrace();
}
La linea marcata è dove sto avendo problemi. Non riesco a capire cosa l'argomento a SimpleDateFormat () dovrebbe essere, o anche se dovrei usare SimpleDateFormat ().
Soluzione
Come circa appena:
Date expiry = new Date(Long.parseLong(date));
EDIT: come da rde6173 risposta s ' e dare un'occhiata più da vicino l'ingresso specificato nella domanda, "1.081.157,732 mila "sembra essere un valore epoch secondi basata in modo che ci si vuole moltiplicare il lungo da parseLong () per 1000 per convertire in millisecondi, che è quello che utilizza Data costruttore di Java, in modo:
Date expiry = new Date(Long.parseLong(date) * 1000);
Altri suggerimenti
Epoch è il numero di secondi dal 1 gennaio 1970 ..
String epochString = "1081157732";
long epoch = Long.parseLong( epochString );
Date expiry = new Date( epoch * 1000 );
Per ulteriori informazioni: http://www.epochconverter.com/
java.time
Utilizzando il quadro java.time
integrato in Java 8 e versioni successive.
import java.time.LocalDateTime;
import java.time.Instant;
import java.time.ZoneId;
long epoch = Long.parseLong("1081157732");
Instant instant = Instant.ofEpochSecond(epoch);
ZonedDateTime.ofInstant(instant, ZoneOffset.UTC); # ZonedDateTime = 2004-04-05T09:35:32Z[UTC]
In questo caso si dovrebbe utilizzare meglio ZonedDateTime
per contrassegnare come data in UTC fuso orario, perché Epoch è definita in UTC nel tempo Unix utilizzata da Java.
ZoneOffset
contiene una costante portata di mano per il fuso orario UTC, come si vede nella ultima riga sopra. La sua superclasse, ZoneId
può essere utilizzato per regolare in altri fusi orari.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)
Meglio ancora, utilizzare JodaTime . Molto più facile per analizzare le stringhe e in stringhe. È thread-safe pure. Vale il tempo ci vorrà per la sua attuazione.
Per convertire secondi timestamp al millisecondo timestamp. È possibile utilizzare l'API TIMEUNIT e ordinato come questo.
long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)
Hum .... se non mi sbaglio, il tempo di Unix Epoch è in realtà la stessa cosa di
System.currentTimeMillis()
Quindi, la scrittura
try {
Date expiry = new Date(Long.parseLong(date));
}
catch(NumberFormatException e) {
// ...
}
dovrebbe funzionare (e di essere molto più veloce quella data parsing)