web-dev-qa-db-fra.com

horodatage long sur LocalDateTime

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());
34
rhandom

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
51
Juan

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());
3
Razib

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.

2
Akshay

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().

1
Alex Roig