Tiempo de época de Unix al objeto de fecha de Java

Resuelto Xenph Yan asked hace 15 años • 6 respuestas

Tengo una cadena que contiene la época de UNIX y necesito convertirla en un objeto de fecha de Java.

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 tengo problemas. No puedo determinar cuál debería ser el argumento de SimpleDateFormat(), o incluso si debería usar SimpleDateFormat().

Xenph Yan avatar Feb 11 '09 07:02 Xenph Yan
Aceptado

¿Qué tal simplemente:

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

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

Date expiry = new Date(Long.parseLong(date) * 1000);
Marc Novakowski avatar Feb 11 '2009 00:02 Marc Novakowski

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

Entonces:

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

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

Ryan Emerle avatar Feb 11 '2009 01:02 Ryan Emerle

java.tiempo

Utilizando el java.timemarco integrado en Java 8 y posteriores.

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, es mejor utilizarlo ZonedDateTimepara marcarlo como fecha en la zona horaria UTC porque Epoch se define en UTC en la hora Unix utilizada por Java.

ZoneOffsetcontiene una constante útil para la zona horaria UTC, como se ve en la última línea de arriba. Su superclase ZoneIdse puede utilizar para adaptarse a otras zonas horarias.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
Przemek avatar Dec 23 '2015 21:12 Przemek