J'ai un horodatage long 1499070300 (équivalent à lundi, 03 juil. 2017 16:25:00 +0800) mais lorsque je le convertis en heure locale, je reçois 1970-01-18T16: 24: 30.300
Voici mon code
long test_timestamp = 1499070300;
LocalDateTime triggerTime =
LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp), TimeZone
.getDefault().toZoneId());
Vous devez passer l'horodatage en millisecondes:
long test_timestamp = 1499070300000L;
LocalDateTime triggerTime =
LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp),
TimeZone.getDefault().toZoneId());
System.out.println(triggerTime);
Résultat:
2017-07-03T10:25
Ou utilisez ofEpochSecond
à la place:
long test_timestamp = 1499070300L;
LocalDateTime triggerTime =
LocalDateTime.ofInstant(Instant.ofEpochSecond(test_timestamp),
TimeZone.getDefault().toZoneId());
System.out.println(triggerTime);
Résultat:
2017-07-03T10:25
Essayez avec la méthode Instant.ofEpochMilli()
ou Instant.ofEpochSecond()
avec it-
long test_timestamp = 1499070300L;
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp ), TimeZone
.getDefault().toZoneId());
Essayez avec ce qui suit ..
long test_timestamp = 1499070300000L;
LocalDateTime triggerTime =
LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp), TimeZone
.getDefault().toZoneId());
Par défaut, 1499070300000
est int si elle ne contient pas l in end.Aussi, le temps passe en millisecondes.
Votre problème est que l'horodatage n'est pas exprimé en millisecondes mais en secondes à partir de la date de l'époque. Multipliez par 1000 votre horodatage ou utilisez la Instant.ofEpochSecond()
.