java - human - unix time
Unix epoch time to Java Fecha objeto (7)
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" );
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 ().
É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/
¿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);
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)
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)
long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)