web-dev-qa-db-fra.com

Heure d'époque Unix en objet Java Date

J'ai une chaîne contenant le UNIX Epoch time , et j'ai besoin de la convertir en objet Date Java.

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

La ligne marquée est l'endroit où j'ai des problèmes. Je ne peux pas déterminer quel devrait être l'argument de SimpleDateFormat () ni même si je devrais utiliser SimpleDateFormat ().

66
Xenph Yan

Que diriez-vous juste:

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

EDIT: selon la réponse de rde6173 et en regardant de plus près l’entrée spécifiée dans la question, "1081157732" semble être une valeur d’époque basée sur les secondes et vous voudrez donc multiplier le long de parseLong (). par 1000 pour convertir en millisecondes, ce que le constructeur Date de Java utilise, donc:

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

Epoch est le nombre de secondes depuis le 1er janvier 1970 .. 

Alors:

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

Pour plus d'informations: http://www.epochconverter.com/

35
Ryan Emerle

Java.time

Utilisation de Java.time framework intégré à Java 8 et versions ultérieures.

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]

Dans ce cas, mieux vaut utiliser ZonedDateTime pour le marquer comme date dans UTC fuseau horaire car Epoch est défini en UTC dans heure Unix utilisé par Java.

ZoneOffset contient une constante pratique pour le fuseau horaire UTC, comme indiqué à la dernière ligne ci-dessus. Sa super-classe, ZoneId peut être utilisée pour s’ajuster à d’autres fuseaux horaires.

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

Mieux encore, utilisez JodaTime . Beaucoup plus facile à analyser les chaînes et dans les chaînes. Le fil est-il également sécurisé? Cela vaut le temps qu'il vous faudra pour le mettre en œuvre.

0
WolfmanDragon