Maison  >  Article  >  Java  >  Comment gérer la date et l'heure du fuseau horaire en Java8

Comment gérer la date et l'heure du fuseau horaire en Java8

WBOY
WBOYavant
2023-05-09 16:49:081413parcourir

J'ai également constaté que ces trois classes n'ont aucune information relative au fuseau horaire, mais on ne peut pas dire qu'elles ne gèrent pas les fuseaux horaires, mais qu'elles masquent sélectivement le traitement des fuseaux horaires. En interne, ils utilisent le fuseau horaire actuel du système d'exploitation.

Dans le même temps, Java fournit également plusieurs classes dans le package java.time pour gérer les API de date et d'heure qui nécessitent une attention particulière aux fuseaux horaires. Il s'agit de java.time.ZonedDateTime et java.time.ZoneId. Le premier est utilisé pour gérer les dates et heures qui nécessitent un fuseau horaire, et le second est utilisé pour gérer les fuseaux horaires. java.time 包中也提供了几个类用于处理需要关注时区的日期时间 API。它们是 java.time.ZonedDateTimejava.time.ZoneId。前者用于处理需要时区的日期时间,后者用于处理时区。

ZonedDateTimeLocalDateTime 类似,几乎有着相同的 API。从某些方面说,ZonedLocalTime 如果不传递时区信息,那么它会默认使用操作系统的时区,这样,结果其实和 LocalDateTime 是类似的。

比如,我们可以使用 ZonedDateTimenow() 方法返回当前时区 ( 操作系统时区 ) 的日期时间,调用 parse() 方法可以将一个包含了时区信息的字符串格式的日期时间转化为一个 ZonedDateTime 实例。

Java8Tester.java

import java.time.ZonedDateTime;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester tester = new Java8Tester();
      tester.run();
   }

   public void run() {

      ZonedDateTime now = ZonedDateTime.now();
      System.out.println("当前日期时间是:" + now);

      ZonedDateTime datetime = ZonedDateTime.parse("2012-10-10T21:58:00+08:00");
      System.out.println("日期时间是:" + datetime);
   }
}

运行结果如下

当前日期时间是:2018-10-08T22:21:56.806597+08:00[Asia/Shanghai] 日期时间是:2012-10-10T21:58+08:00

我们还可以调用 ZonedDateTime 对象的 toLocalDate()toLocalTime() 方法将获取该实例的转换为本地的日期和时间

import java.time.LocalTime;
import java.time.LocalDate;
import java.time.ZonedDateTime;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester tester = new Java8Tester();
      tester.run();
   }

   public void run() {

      ZonedDateTime now = ZonedDateTime.now();
      System.out.println("当前日期时间是:" + now);

      LocalDate date = now.toLocalDate();
      System.out.println("本地日期是:" + now);

      LocalTime time = now.toLocalTime();
      System.out.println("本地时间是:" + time);


   }
}

运行结果如下

当前日期时间是:2022-10-08T22:28:10.389487+08:00[Asia/Shanghai] 本地日期是:2022-10-08T22:28:10.389487+08:00[Asia/Shanghai] 本地时间是:22:28:10.389487

P.S 这个返回值好诡异,为啥 toLocalDate() 还返回了时间?

处理时区

时区相关的信息,我们可以使用 ZoneId 类来处理。

比如可以调用 ZoneId 类的静态方法 systemDefault() 返回当前的时区。

import java.time.ZonedDateTime;
import java.time.ZoneId;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester tester = new Java8Tester();
      tester.run();
   }

   public void run() {

      ZoneId currentZone = ZoneId.systemDefault();
      System.out.println("当前时区是: " + currentZone);
   }
}

运行结果如下

当前时区是: Asia/Shanghai

我们还可以调用 ZonedDateTime 实例的 getZone()

ZonedDateTime est similaire à LocalDateTime et possède presque la même API. D'une certaine manière, ZonedLocalTime utilisera par défaut le fuseau horaire du système d'exploitation si aucune information de fuseau horaire n'est transmise, le résultat est donc similaire à LocalDateTime.

Par exemple, nous pouvons utiliser la méthode now() de ZonedDateTime pour renvoyer la date et l'heure du fuseau horaire actuel (fuseau horaire du système d'exploitation) et appeler parse() peut convertir une date et une heure au format chaîne contenant des informations de fuseau horaire en une instance ZonedDateTime.

Java8Tester.java

import java.time.ZonedDateTime;
import java.time.ZoneId;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester tester = new Java8Tester();
      tester.run();
   }

   public void run() {

      ZonedDateTime now = ZonedDateTime.now();
      System.out.println("当前时区是: " + now.getZone());
   }
}

Les résultats en cours sont les suivants

🎜La date et l'heure actuelles sont : 2018-10-08T22:21:56.806597+08:00[Asia/Shanghai] La date et l'heure est : 2012-10- 10T21:58+08:00🎜🎜🎜Nous pouvons également appeler toLocalDate() et toLocalTime() de l'objet ZonedDateTime. code> méthodes pour obtenir l'instance La conversion en date et heure locales🎜rrreee🎜Le résultat en cours d'exécution est le suivant🎜🎜🎜La date et l'heure actuelles sont : 2022-10-08T22:28:10.389487+08:00[Asia/Shanghai ] La date locale est : 2022-10-08T22 : 28:10.389487+08:00[Asia/Shanghai] L'heure locale est : 22:28:10.389487🎜🎜🎜P.S Cette valeur de retour est si bizarre Pourquoi . toLocalDate() renvoie l'heure ? 🎜

Traitement du fuseau horaire

🎜Informations liées au fuseau horaire, nous pouvons utiliser la classe ZoneId pour les traiter. 🎜🎜Par exemple, vous pouvez appeler la méthode statique systemDefault() de la classe ZoneId pour renvoyer le fuseau horaire actuel. 🎜rrreee🎜Les résultats en cours d'exécution sont les suivants🎜🎜🎜Le fuseau horaire actuel est : Asia/Shanghai🎜🎜🎜Nous pouvons également appeler la méthode getZone() du ZonedDateTime instance pour obtenir le fuseau horaire où se trouve l'instance🎜 rrreee🎜Les résultats en cours d'exécution sont les suivants🎜🎜🎜Le fuseau horaire actuel est : Asie/Shanghai🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer