Tiempo de época de Unix al objeto de fecha de Java
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().
¿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);
É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/
java.tiempo
Utilizando el java.time
marco 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 ZonedDateTime
para marcarlo como fecha en la zona horaria UTC porque Epoch se define en UTC en la hora Unix utilizada 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 utilizar para adaptarse a otras zonas horarias.
ZoneId zoneId = ZoneId.of( "America/Montreal" );