JSR 310 :: System.currentTimeMillis() vs Instant.toEpochMilli() :: Fuseau horaire

Pourriez vous s'il vous plaît jeter une certaine lumière sur la façon d'obtenir correcte époque le temps en millisecondes pour un fuseau horaire par défaut du système et compte tenu de fuseau horaire.

Donné

1. Fuseau horaire: GMT+3

2. L'extrait de code suivant:

import java.time.*;

public class Main {        
    public static void main(String[] args) {
        System.out.println(LocalDateTime
            .now()
            .atZone(ZoneOffset.UTC)
            .toInstant()
            .toEpochMilli()
        );
        System.out.println(LocalDateTime
            .now()
            .atZone(ZoneOffset.of("+3"))
            .toInstant()
            .toEpochMilli()
        );
        System.out.println(System.currentTimeMillis());
    }
}

3. Sortie:

1444158955508
1444148155508
1444148155508

4. JavaDoc pour Système.currentTimeMillis() qui indique que la valeur retournée sera la différence, mesurée en millisecondes, entre l'heure actuelle et à minuit, le 1er janvier 1970 UTC.

Alors, pourquoi

  1. la sortie de la LocalDateTime à GMT+3 est le même que celui de System.currentTimeMillis(), bien que les docs pour la System.currentTimeMillis() mention UTC?
  2. la sortie de la LocalDateTime à UTC diffère de System.currentTimeMillis(), bien que les docs pour la System.currentTimeMillis() mention UTC?
InformationsquelleAutor szhem | 2015-10-06