Unix epoch time to Java Fecha objeto

Tengo una cadena que contiene el tiempo de la Época UNIX , y necesito convertirlo a un objeto Java Date.

String date = "1081157732"; DateFormat df = new SimpleDateFormat(""); // This line try { Date expiry = df.parse(date); } catch (ParseException ex) { ex.getStackTrace(); } 

La línea marcada es donde estoy teniendo problemas. No puedo averiguar cuál debería ser el argumento para SimpleDateFormat (), o incluso si debería usar SimpleDateFormat ().

¿Qué tal solo?

 Date expiry = new Date(Long.parseLong(date)); 

EDITAR: según la respuesta de rde6173 y mirando más de cerca la entrada especificada en la pregunta, “1081157732” parece ser un valor de época basado en segundos, por lo que querría multiplicar el largo de parseLong () por 1000 para convertir a milisegundos, que es el constructor de fecha de Java, así que:

 Date expiry = new Date(Long.parseLong(date) * 1000); 

Época es el número de segundos desde el 1 de enero de 1970 ..

Asi que:

 String epochString = "1081157732"; long epoch = Long.parseLong( epochString ); Date expiry = new Date( epoch * 1000 ); 

Para más información: http://www.epochconverter.com/

java.time

Usar el marco java.time integrado en Java 8 y posterior.

 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] 

En este caso, debería utilizar ZonedDateTime para marcarlo como fecha en la zona horaria UTC porque Epoch está definido en UTC en el tiempo Unix utilizado por Java.

ZoneOffset contiene una constante útil para la zona horaria UTC, como se ve en la última línea de arriba. Su superclase, ZoneId se puede usar para ajustarse a otras zonas horarias.

 ZoneId zoneId = ZoneId.of( "America/Montreal" ); 
 long timestamp = Long.parseLong(date) Date expiry = new Date(timestamp * 1000) 

Mejor aún, usa JodaTime . Mucho más fácil analizar cadenas y cadenas. ¿Es seguro el hilo también? Vale la pena el tiempo que le llevará implementarlo.

Para convertir la marca de tiempo de segundos a la marca de tiempo de milisegundos. Podría usar la API TimeUnit y ordenada así.

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

Hum … si no me equivoco, el tiempo de la Época UNIX es en realidad lo mismo que

 System.currentTimeMillis() 

Entonces escribiendo

 try { Date expiry = new Date(Long.parseLong(date)); } catch(NumberFormatException e) { // ... } 

debería funcionar (y ser mucho más rápido que el análisis de la fecha)