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 ().

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top