Date et heure Java


Le package java.util fournit la classe Date pour encapsuler la date et l'heure actuelles. La classe Date fournit deux constructeurs pour instancier des objets Date.

Le premier constructeur initialise l'objet en utilisant la date et l'heure actuelles.

Date( )

Le deuxième constructeur reçoit un paramètre, qui est le nombre de millisecondes depuis le 1er janvier 1970.

Date(long millisec)

Une fois l'objet Date créé, vous pouvez appeler la méthode suivante.

Numéro de série               Méthode et description
1booléen après(Date date)
Si l'objet Date appelant cette méthode renvoie vrai après la date spécifiée, sinon il renvoie faux.
2booléen avant(Date date)
Si l'objet Date appelant cette méthode renvoie vrai avant la date spécifiée, sinon il renvoie faux.
3Clonage d'objet( )
Renvoie une copie de cet objet.
4int comparerÀ(Date date)
Compare l'objet Date et la date spécifiée lorsque cette méthode est appelée. Lorsque les deux sont égaux, 0 est renvoyé. Si l'objet appelant est antérieur à la date spécifiée, un nombre négatif est renvoyé. L'objet appelant renvoie un nombre positif après la date spécifiée.
5int comparerTo(Object obj)
Si obj est de type Date, l’opération est équivalente à compareTo(Date). Sinon, il lève ClassCastException.
6booléen égal(Date de l'objet)
Renvoie vrai lorsque l'objet Date appelant cette méthode est égal à la date spécifiée, sinon il renvoie faux.
7long getTime( )
Renvoie le nombre de millisecondes représentées par cet objet Date depuis le 1er janvier 1970 à 00:00:00 GMT.
8int hashCode( )
Renvoie la valeur du code de hachage de cet objet.
9void setTime (longtemps)

Réglez l'heure et la date en millisecondes depuis le 1er janvier 1970 à 00:00:00 GMT.
10Chaîne versChaîne( )
Convertit un objet Date en une représentation String et renvoie la chaîne.

Obtenir la date et l'heure actuelles

Obtenir la date et l'heure actuelles en Java est très simple. Utilisez la méthode toString() de l'objet Date pour imprimer la date et l'heure actuelles, comme indiqué. ci-dessous :

import java.util.Date;
  
public class DateDemo {
   public static void main(String args[]) {
       // 初始化 Date 对象
       Date date = new Date();
        
       // 使用 toString() 函数显示日期时间
       System.out.println(date.toString());
   }
}

Les résultats de compilation et d'exécution de l'exemple ci-dessus sont les suivants :

Mon May 04 09:51:52 CDT 2013

Comparaison de dates

Java utilise les trois méthodes suivantes pour comparer deux dates:

  • Utilisez la méthode getTime() pour obtenir deux dates (le nombre de millisecondes depuis le 1er janvier 1970), puis comparez les deux valeurs.

  • Utilisez les méthodes before(), after() et equals(). Par exemple, si le 12 d’un mois est antérieur au 18, alors new Date(99, 2, 12).before(new Date (99, 2, 18)) renvoie true.

  • Utilisez la méthode compareTo(), qui est définie par l'interface Comparable, et la classe Date implémente cette interface.


Formatage des dates à l'aide de SimpleDateFormat

SimpleDateFormat est une classe permettant de formater et d'analyser les dates en fonction des paramètres régionaux. SimpleDateFormat vous permet de choisir n'importe quel format de date et d'heure défini par l'utilisateur sur lequel s'exécuter. Par exemple :

import java.util.*;
import java.text.*;

public class DateDemo {
   public static void main(String args[]) {

      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

      System.out.println("Current Date: " + ft.format(dNow));
   }
}

Les résultats de compilation et d'exécution de l'exemple ci-dessus sont les suivants :

Current Date: Sun 2004.07.18 at 04:14:09 PM PDT

Encodage au format Simple DateFormat

La chaîne du modèle d'heure est utilisée pour spécifier le format de l'heure. Dans ce mode, toutes les lettres ASCII sont réservées comme lettres de modèle, définies comme suit :

LettreDescriptionExemple
G                 Marque d'époque                 AD
                     y               Année à quatre chiffres 2001
                        M               Mois Juillet ou 07
                  d               Jour du mois               10
                  h               Heures au format A.M./P.M. (1~12)                 12
                  H               Heure de la journée (0~23)                   22
                  m               Nombre de minutes               30
                  s               Secondes                 55
                S                 Nombre de millisecondes 234
                  E               Jour de la semaine Mardi
                D               Jours de l'année                 360
                  F                 Jour de la semaine                 2 (deuxième mercredi de juillet)
                w               Semaine de l'année               40
                  W               Semaine du mois                 1
                  a               Marque A.M./P.M.                 MP
                k               Heure de la journée (1~24)                            24
                K               Heure au format A.M./P.M. (0~11)                 10
                  z               Fuseau horaire               Heure normale de l'Est
' Délimiteur de texte                 Délimiteur
                  "                 Guillemets simples                 `

Utilisez printf pour formater les dates

La méthode printf facilite le formatage de l'heure et de la date. Utilisez le format à deux lettres, qui commence par t et se termine par une lettre du tableau ci-dessous. Par exemple :

import java.util.Date;

public class DateDemo {

  public static void main(String args[]) {
     // 初始化 Date 对象
     Date date = new Date();

     // 使用toString()显示日期和时间
     String str = String.format("Current Date/Time : %tc", date );

     System.out.printf(str);
  }
}

Les résultats de compilation et d'exécution de l'exemple ci-dessus sont les suivants :

Current Date/Time : Sat Dec 15 16:37:57 MST 2012

Si vous devez fournir la date à plusieurs reprises , utilisez cette méthode pour le formater. Chaque partie est un peu plus compliquée. Par conséquent, une chaîne de format peut être utilisée pour indiquer l'index du paramètre à formater.

L'index doit immédiatement suivre % et doit se terminer par $. Par exemple :

import java.util.Date;
  
public class DateDemo {

   public static void main(String args[]) {
       // 初始化 Date 对象
       Date date = new Date();
        
       // 使用toString()显示日期和时间
       System.out.printf("%1$s %2$tB %2$td, %2$tY", 
                         "Due date:", date);
   }
}

Les résultats de compilation et d'exécution de l'exemple ci-dessus sont les suivants :

Due date: February 09, 2004

Ou, vous pouvez utiliser le < signe. Il indique que les paramètres précédemment formatés doivent être réutilisés. Par exemple :

import java.util.Date;
  
public class DateDemo {

   public static void main(String args[]) {
       // 初始化 Date 对象
       Date date = new Date();
        
       // 显示格式化时间
       System.out.printf("%s %tB %<te, %<tY", 
                         "Due date:", date);
   }
}

Les résultats de compilation et d'exécution de l'exemple ci-dessus sont les suivants :

Due date: February 09, 2004

Caractères de conversion de date et d'heure

CaractèresDescription Exemple
c                 Date et heure complètes                 Lun 4 mai 09:51:52 CDT 2009
F               Date au format ISO 8601                 2004-02-09
                     D               Date au format américain (mois/jour/année)                            02/09/2004
                     T               24 heures                 18:05:19
                   r                 12 heures 18:05:19
R               24 heures, hors secondes                 18h05
                    Y               Année à 4 chiffres (y compris le 0 en tête)                 2004
                      y               Les 2 derniers chiffres de l'année (y compris le 0 en tête)                 04
                C               Les 2 premiers chiffres de l'année (y compris le 0 en tête)                 20
                  B               Le nom complet du mois Février
                      b                 Abréviation du mois Février
                     n                 Mois à 2 chiffres (y compris le 0 initial)                 02
                        d               Jour à 2 chiffres (y compris le 0 initial)                 03
                        e               Jour à 2 chiffres (hors 0 initial)                   9
                  A               Nom complet de la semaine                 Lundi
a               Abréviation de la semaine                 Lun
                j               Année à 3 chiffres (y compris le 0 initial)                 069
                    H               Heure à 2 chiffres (y compris le 0 initial), de 00 à 23                 18
                  k               Heure à 2 chiffres (hors 0 initial), 0 à 23                 18
                  Je               Heure à 2 chiffres (y compris le 0 initial), 01 à 12                 06
                  l               Heure à 2 chiffres (hors 0 initial), 1 à 12                 6
                  M               Minute à 2 chiffres (y compris le 0 initial)                 05
                  S                 Secondes à 2 chiffres (y compris le 0 initial)                   19
                  L               Millisecondes à 3 chiffres (y compris le 0 initial)                   047
                N               Nanoseconde de 9 bits (y compris le 0 initial)                 047000000
                   P               Signe de l'après-midi en majuscule                 MP
                p               Signe de l'après-midi minuscule et majuscule                 mp
                     z               Décalage numérique RFC 822 par rapport à GMT                   -0800
                  Z               Fuseau horaire               PST
s               Nombre de secondes depuis le 01/01/1970 00:00:00 GMT                       1078884319
                    Q               Depuis le 01/01/1970 00:00:00 GMT, c'est merveilleux 1078884319047

Il existe d'autres cours utiles liés à la date et à l'heure. Pour plus de détails, vous pouvez vous référer à la documentation des standards Java.


Analyser une chaîne en tant qu'heure

La classe SimpleDateFormat possède des méthodes supplémentaires, notamment parse(), qui tente d'analyser la chaîne en fonction du stockage formaté de l'objet SimpleDateFormat donné. . Par exemple :

import java.util.*;
import java.text.*;
  
public class DateDemo {

   public static void main(String args[]) {
      SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); 

      String input = args.length == 0 ? "1818-11-11" : args[0]; 

      System.out.print(input + " Parses as "); 

      Date t; 

      try { 
          t = ft.parse(input); 
          System.out.println(t); 
      } catch (ParseException e) { 
          System.out.println("Unparseable using " + ft); 
      }
   }
}

Les résultats de compilation et d'exécution de l'exemple ci-dessus sont les suivants :

$ java DateDemo
1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java DateDemo 2007-12-01
2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007

Java sleep (sleep)

sleep() met le courant thread dans un état stagnant (bloque le thread actuel), le but de renoncer à l'utilisation du CPU est d'empêcher le thread actuel d'occuper les ressources CPU obtenues par le processus seul, afin de laisser un certain temps aux autres threads à exécuter.

Vous pouvez mettre un programme en veille pendant une milliseconde ou aussi longtemps que dure la durée de vie de votre ordinateur. Par exemple, le programme suivant va dormir pendant 3 secondes :

import java.util.*;
  
public class SleepDemo {
   public static void main(String args[]) {
      try { 
         System.out.println(new Date( ) + "\n"); 
         Thread.sleep(1000*3);   // 休眠3秒
         System.out.println(new Date( ) + "\n"); 
      } catch (Exception e) { 
          System.out.println("Got an exception!"); 
      }
   }
}

Les résultats de compilation et d'exécution de l'exemple ci-dessus sont les suivants :

Thu Sep 17 10:20:30 CST 2015

Thu Sep 17 10:20:33 CST 2015

Temps de mesure

L'exemple suivant montre comment mesurer l'intervalle de temps (en millisecondes) :

import java.util.*;
  
public class DiffDemo {

   public static void main(String args[]) {
      try {
         long start = System.currentTimeMillis( );
         System.out.println(new Date( ) + "\n");
         Thread.sleep(5*60*10);
         System.out.println(new Date( ) + "\n");
         long end = System.currentTimeMillis( );
         long diff = end - start;
         System.out.println("Difference is : " + diff);
      } catch (Exception e) {
         System.out.println("Got an exception!");
      }
   }
}

La compilation et l'exécution Les résultats de l'exemple ci-dessus sont les suivants :

Fri Jan 08 09:48:47 CST 2016

Fri Jan 08 09:48:50 CST 2016

Difference is : 3019

Classe Calendrier

Nous sommes maintenant capables de formater et de créer un objet date, mais comment pouvons-nous définir et obtenir des parties spécifiques de l'objet date ? des données de date, telles que l'heure, le jour ou les minutes ? Comment ajouter ou soustraire des valeurs de ces parties de la date ? La réponse est d'utiliser la classe Calendar.

La classe Calendar est beaucoup plus puissante que la classe Date, et son implémentation est également plus complexe que la classe Date.

La classe Calendar est une classe abstraite qui implémente des objets de sous-classes spécifiques en utilisation réelle. Le processus de création d'objets est transparent pour les programmeurs et ne doit être créé qu'à l'aide de la méthode getInstance.

Créez un objet Calendrier représentant la date actuelle du système

Calendar c = Calendar.getInstance();//默认是当前日期

Créez un objet Calendrier pour une date spécifiée

Pour utiliser la classe Calendrier pour représenter une heure spécifique, vous Vous devez d'abord créer un objet Calendrier, puis définir les paramètres de l'année, du mois et du jour dans l'objet pour terminer.

//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);

Type de champ d'objet de classe Calendar

Ces constantes sont utilisées dans la classe Calendar pour représenter différentes significations De nombreuses classes de jdk adoptent en fait cette idée

常量描述
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE日期
Calendar.DAY_OF_MONTH日期,和上面的字段意义完全相同
Calendar.HOUR12小时制的小时
Calendar.HOUR_OF_DAY24小时制的小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK星期几
.

Paramètres des informations sur les objets de classe de calendrier

Définir les paramètres

Par exemple :

Calendar c1 = Calendar.getInstance();

Appel :

public final void set(int year,int month,int date)
c1.set(2009, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12

Utiliser les types de champs Définition de

Si vous définissez uniquement la valeur d'un certain champ, tel que la date, vous pouvez utiliser la méthode de définition suivante :

public void set(int field,int value)

Définissez la date représentée par l'objet c1 au 10, et toutes les autres valeurs seront recalculées

c1.set(Calendar.DATE,10);

Définissez l'année représentée par l'objet c1 sur 2008, et toutes les autres valeurs​​seront recalculées

c1.set(Calendar.YEAR,2008);

La signification des autres attributs de champ sets se déduit par analogie

Ajouter un paramètre

Calendar c1 = Calendar.getInstance();

Ajouter 10 à la date de l'objet c1, c'est-à-dire que c1 est exprimé comme la date 10 jours plus tard, et toutes les autres valeurs​​seront recalculées

c1.add(Calendar.DATE, 10);

Soustrayez 10 de la date de l'objet c1, c'est-à-dire que c1 est exprimé comme la date d'il y a 10 jours, et toutes les autres valeurs​​seront recalculé

<pre>c1.add(Calendar.DATE, -10);

La signification de add pour les autres attributs de champ se déduit de la même manière

Acquisition des informations sur l'objet de la classe Calendar

Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);

Classe GregorianCalendar

La classe Calendar implémente le calendrier grégorien, et GregorianCalendar est une implémentation spécifique de la classe Calendar.

La méthode getInstance() de Calendar renvoie un objet GregorianCalendar initialisé par défaut avec les paramètres régionaux et le fuseau horaire actuels. GregorianCalendar définit deux champs : AD et BC. Celles-ci représentent les deux époques définies par le calendrier grégorien.

Voici plusieurs méthodes de construction de l'objet GregorianCalendar :

序号构造函数和说明
                    1GregorianCalendar()
在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。
                    2GregorianCalendar(int year, int month, int date)
在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar
                    3GregorianCalendar(int year, int month, int date, int hour, int minute)
为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。
                    4GregorianCalendar(int year, int month, int date, int hour, int minute, int second)
  为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。
                    5GregorianCalendar(Locale aLocale)
在具有给定语言环境的默认时区内构造一个基于当前时间的 GregorianCalendar。
                    6GregorianCalendar(TimeZone zone)
在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。
                    7GregorianCalendar(TimeZone zone, Locale aLocale)
 在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。

Voici une liste de quelques méthodes utiles fournies par la classe GregorianCalendar :

Numéro de sérieMéthode et instructions
1annuler l'ajout (champ int, montant int)
Ajoute la durée spécifiée (signée) au champ de calendrier donné conformément aux règles du calendrier.
2protected void calculateFields()
Convertir la valeur UTC en millisecondes en valeur de domaine temporel
                      3protected void calculateTime()
Remplacez le calendrier et convertissez la valeur du domaine temporel en valeur UTC en millisecondes
4booléen égal(Object obj)
Compare ce GregorianCalendar à l'objet spécifié.
5int get(champ int)
Obtenez la valeur temporelle du champ spécifié
6int getActualMaximum(champ int)
Renvoie la date actuelle, la valeur maximale du champ donné
7int getActualMinimum(champ int)
Renvoie la date actuelle, la valeur minimale du champ donné
8int getGreatestMinimum(champ int)
Renvoie la valeur minimale la plus élevée pour le champ de calendrier donné dans cette instance de GregorianCalendar.
9Date getGregorianChange()
Obtenez la date de changement du calendrier grégorien.
10int getLeastMaximum(champ int)
Renvoie la valeur maximale la plus basse pour le champ de calendrier donné dans cette instance de GregorianCalendar
11int getMaximum(champ int)
Renvoie la valeur maximale du champ de calendrier donné pour cette instance de GregorianCalendar.
12Date getTime()
Obtenez l'heure actuelle du calendrier.
13long getTimeInMillis()
Obtenez l'heure actuelle du calendrier exprimée sous forme d'entier long
                     14TimeZone getTimeZone()
Obtenez le fuseau horaire.
15int getMinimum(champ int)
Renvoie la valeur minimale du champ donné.
            &