web-dev-qa-db-fra.com

Java 8 ZoneOffset - Comment obtenir le décalage UTC actuel du système

Je veux obtenir l'actuel ZoneOffset de mon système.
J'ai essayé de le faire mais je n'ai pas trouvé de moyen.
Aussi, je cherchais une solution mais je n'en ai pas trouvé.
Est-il possible de faire cela en Java?

ÉDITER:
Ma question est différente de this . Je voudrais connaître l'UTC du système actuel, pas comment convertir entre la représentation de décalage TimeZone ou le stockage TimeZone.

12
Allison Burgers

Oui c'est possible:

ZoneOffset.systemDefault().getRules().getOffset(Instant.now())

ou vous pouvez remplacer l'instance instantanée par l'instance LocalDateTime:

ZoneOffset.systemDefault().getRules().getOffset(LocalDateTime.now())
15
Michał Szewczyk

Votre demande se compose de deux parties:

  • l'offset de "mon système" - vous avez donc besoin du fuseau horaire du système - ZoneId.systemDefault()
  • l'offset "courant" - donc vous avez besoin de l'instant courant - Instant.now()

Ceux-ci sont liés ensemble à l'aide de ZoneRules, pour obtenir les éléments suivants:

ZoneOffset o = ZoneId.systemDefault().getRules().getOffset(Instant.now());

Pour simplifier, vous pouvez utiliser OffsetDateTime:

ZoneOffset o = OffsetDateTime.now().getOffset();

Cela fonctionne car OffsetDateTime.now() utilise à la fois ZoneId.systemDefault() et Instant.now() en interne.

19
JodaStephen