Unix Epix Time to Java Date object

J’ai une chaîne contenant l’ heure Epix UNIX et je dois la convertir en un object Java Date.

Ssortingng 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 savoir ce que devrait être l’argument de SimpleDateFormat (), ou même si je devrais utiliser SimpleDateFormat ().

Que diriez-vous de:

 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, donc vous devez multiplier le long de parseLong () par 1000 pour convertir en millisecondes, ce que le constructeur de Date de Java utilise, donc:

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

L’époque est le nombre de secondes écastings depuis le 1er janvier 1970.

Alors:

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

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

java.time

Utilisation du framework java.time intégré à Java 8 et ultérieur.

 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, vous devriez mieux utiliser ZonedDateTime pour le marquer comme date dans le fuseau horaire UTC car Epoch est défini dans UTC au temps Unix utilisé par Java.

ZoneOffset contient une constante pratique pour le fuseau horaire UTC, comme indiqué dans 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" ); 
 long timestamp = Long.parseLong(date) Date expiry = new Date(timestamp * 1000) 

Mieux encore, utilisez JodaTime . Beaucoup plus facile d’parsingr les chaînes et les chaînes. Le fil est-il aussi sûr? Cela vaut le temps qu’il vous faudra pour le mettre en œuvre.

Pour convertir l’horodatage des secondes en horodatage en millisecondes. Vous pouvez utiliser l’API TimeUnit et vous en sortir comme ça.

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

Hum …. si je ne me trompe pas, le temps UNIX Epoch est en fait la même chose que

 System.currentTimeMillis() 

Donc écrire

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

devrait fonctionner (et être beaucoup plus rapide que l’parsing de date)