API de temps Java

Le temps doit être comparé dans le projet, et il existe environ deux types en JAVA, l'un est la classe Date avant JDK8 (généralement utilisée avec SimpleDateFormat) et diverses classes Zone sous le package time après JDK8.

Dans le projet actuel, les exigences sont les suivantes : accepter la chaîne envoyée depuis le front-end, l'analyser en classe temporelle, la stocker et la comparer.

Ce qui doit être convenu à l’avance, c’est le format horaire.
Dans swagger, vous pouvez voir que le format horaire de la demande d'échantillon est le suivant,
insérer la description de l'image ici
où T est le délimiteur et Z représente le temps universel coordonné. Dans l'armée, le fuseau horaire universel coordonné utilise « Z » pour représenter UTC (temps universel coordonné). UTC+8 est l’heure de Pékin dans le huitième district Est. Le point décimal après les secondes est utilisé pour séparer les millisecondes des secondes.

API traditionnelle : Date, SimpleDateFormat

Date lui-même n'a pas d'API liée à l'analyse, mais SimpleDateFormat offre une telle capacité, et Date lui-même implémente la fonction compareTo, qui peut être utilisée directement à des fins de comparaison.
Les paramètres du modèle de SimpleDateFormat sont les suivants :

  • Identifiant de l'ère G
  • année y
  • M mois
  • jour j
  • h est le matin ou l'après-midi (1 ~ 12)
  • Heure H dans la journée (0 ~ 23)
  • m points
  • s secondes
  • S millisecondes
  • Semaine E
  • Jour J de l'année
  • F Le jour de la semaine en janvier
  • w Semaine de l'année
  • Semaine W en janvier
  • un marqueur AM/PM
  • k heure dans la journée (1 ~ 24)
  • L'heure K est le matin ou l'après-midi (0 ~ 11)
  • Fuseau horaire z (CST)
  • Fuseau horaire Z(+8:00)

De plus, vous pouvez également obtenir directement le nombre de millisecondes via System.currentTimeMillis().
L'exemple de code est le suivant :

        // 毫秒数
        System.out.println(System.currentTimeMillis()); // 1665660325997

        // 2022-10-12T06:24:56.251Z 前端格式

        String time1 = "2021-1-9 12:17:22";
        // SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = format1.parse(time1); //转换为Date类
        System.out.println(date.getTime()); // getTime -> 毫秒数 1610165842000
        System.out.println(format1.format(date)); // 2021-01-09 12:17:22

        String time2 = "2022-10-12T06:24:56.251Z"; // "yyyy-MM-ddThh:mm:ss.SS"
        SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        Date date2 = format2.parse(time2); //转换为Date类
        System.out.println(format2.format(date2)); // 2022-10-12T06:24:56.251Z

        System.out.println(date.compareTo(new Date())); // -1
        System.out.println(date.compareTo(date)); // 0
        System.out.println(new Date().compareTo(date)); // 1

LocalXXX

La nouvelle API temporelle de jdk8 est livrée avec sa propre API d'analyse et sa propre API de comparaison, qui sont recommandées.
Il existe LocalTime, LocalDateTime et ZonedDateTime.
La principale utilisée est ZonedDateTime. Cette classe possède également plusieurs méthodes plus importantes.

  • now() obtient l'heure actuelle
  • withFixedOffsetZone() utilise un décalage et un fuseau horaire fixes
  • isAfter() Si c'est après une certaine heure
    Cet objet a deux paramètres de décalage et de fuseau horaire. À mesure que le fuseau horaire change, le décalage et l'heure changeront, mais la somme du décalage et du temps est fixe. Lorsque withFixedOffsetZone() n'est pas défini, le décalage par défaut est +8 et le fuseau horaire est Asie/Shanghai, mais une fois corrigé, ces deux variables deviennent Z, indiquant l'heure sans décalage. Les paramètres pertinents peuvent être visualisés via les fonctions suivantes :
  • getOffset()
  • L'exemple de code pour getZone()
    est le suivant :
		System.out.println(LocalDate.now()); // 2022-10-13
        System.out.println(LocalTime.now()); // 16:54:32.672
        System.out.println(LocalDateTime.now()); // 2022-10-13T16:54:32.672
        System.out.println(ZonedDateTime.now()); // 2022-10-13T16:54:32.672+08:00[Asia/Shanghai]
        System.out.println(ZonedDateTime.now().withFixedOffsetZone()); // 2022-10-13T17:30:33.392+08:00
        System.out.println(ZonedDateTime.now().getOffset()); // +08:00
        System.out.println(ZonedDateTime.now().getZone()); // Asia/Shanghai
        System.out.println(ZonedDateTime.parse("2022-10-12T06:24:56.251Z").withFixedOffsetZone()); // 2022-10-12T06:24:56.251Z
        System.out.println(ZonedDateTime.parse("2022-10-12T06:24:56.251+08:00[Asia/Shanghai]")); // 2022-10-12T06:24:56.251+08:00[Asia/Shanghai]
        ZonedDateTime time = ZonedDateTime.parse("2022-10-12T06:24:56.251Z").withFixedOffsetZone(); 
        System.out.println(time); // 2022-10-12T06:24:56.251Z
        System.out.println(time.isAfter(ZonedDateTime.now().withFixedOffsetZone())); // false
        System.out.println(time.getOffset()); // Z
        System.out.println(time.getZone()); // Z

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45654405/article/details/127305932
conseillé
Classement