Vous êtes ici :
Accueil Cours Programmations La Programmation Orientée Objet en Java Date et heure

La Programmation Orientée Objet en Java : Date et heure

Java fournit la classe Date disponible dans le paquetage java.util, cette classe encapsule la date et l'heure actuelles.

La classe Date prend en charge deux constructeurs. Le premier constructeur initialise l'objet avec la date et l'heure actuelles.

Date()

Le constructeur suivant accepte un argument qui équivaut au nombre de millisecondes qui s'est écoulé depuis minuit le 1er janvier 1970

Date(long millisec)

Une fois que vous disposez d'un objet Date, vous pouvez appeler l'une des méthodes de support suivantes pour les dates:

SN

Méthodes avec description

1

boolean after(Date date) 
Renvoie true si l'objet Date d'appel contient une date qui est plus tard que celle spécifiée par date, sinon elle renvoie false.

2

boolean before(Date date)
Renvoie true si l'objet Date de l'appel contient une date antérieure à celle spécifiée par date, sinon elle renvoie false.

3

Object clone( )
Duplique l'objet Date d'appel.

4

int compareTo(Date date)
Compare la valeur de l'objet appelant avec celui de la date. Renvoie 0 si les valeurs sont égales. Renvoie une valeur négative si l'objet d'appel est antérieur à la date. Renvoie une valeur positive si l'objet d'appel est postérieur à la date.

5

int compareTo(Object obj) 
Fonctionne de manière identique à compareTo(Date) si obj est de classe Date. Sinon, il lance une exception ClassCastException.

6

boolean equals(Object date)
Renvoie true si l'objet Date d'appel contient la même date que celle spécifiée par date, sinon elle renvoie false.

7

long getTime() 
Renvoie le nombre de millisecondes qui s'est écoulé depuis le 1er janvier 1970.

8

int hashCode() 
Renvoie un code de hachage pour l'objet d'appel.

9

void setTime(long time) 
Définit l'heure et la date spécifiées par le time, ce qui représente un temps écoulé en millisecondes à partir de minuit le 1er janvier 1970

10

String toString( ) 
Convertit l'objet Date d'appel en une chaîne et renvoie le résultat.

Obtenir la date et l'heure actuelles

Il est très facile d'obtenir la date et l'heure actuelles en Java. Vous pouvez utiliser un objet Date simple avec la méthode toString( ) pour afficher la date et l'heure actuelles comme suit:

import java.util.Date;
public class DateDemo {
   public static void main(String args[]) {
       //instancier un objet Date
       Date date = new Date();
       // afficher l'heure et la date en utilisant toString()
       System.out.println(date.toString());
   }
}

Cela produirait le résultat suivant:

Mon Aug 21 09:51:52 CDT 2017

Comparaison de dates

Voici trois façons de comparer deux dates:

  • Vous pouvez utiliser getTime() pour obtenir le nombre de millisecondes qui s'est écoulé depuis le minuit du 1er janvier 1970 pour les deux objets, puis comparez ces deux valeurs.
  • Vous pouvez utiliser les méthodes before( ), after() et equals(). Parce que le 12 du mois vient avant le 18, par exemple, new Date( 99, 2, 12).before(new Date(99, 2, 18)) renvoie true (vraie).
  • Vous pouvez utiliser la méthode compareTo( ), définie par l'interface Comparable et mise en œuvre par Date.

Formatage de date à l'aide de SimpleDateFormat

SimpleDateFormat est une classe concrète pour le formatage et l'analyse des dates d'une manière contextuelle. SimpleDateFormat vous permet de commencer par choisir des motifs définis par l'utilisateur pour la mise en forme date-heure. 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));
   }
}

Cela produirait le résultat suivant:

Current Date: Mon 2017.08.21 at 10:14:09 PM PDT

Codes format de SimpleDateFormat 

Pour spécifier le format de temps, utilisez une chaîne de motif de temps. Dans ce modèle, toutes les lettres ASCII sont réservées sous forme de lettres de motif, qui sont définies comme suit:

Code

La description

Exemple

G

Designateur de l'époque

UN D

Y

Année en quatre chiffres

2001

M

Mois de l’année

July ou 07

D

Jour de mois

10

H

Heure en AM / PM (1 à 12)

12

H

Heure (0 ~ 23)

22

m

Minute

30

s

Seconde

55

S

Milliseconde

234

E

Jour de la semaine

Tuesday

D

Jour de l'année

360

F

Jour de la semaine dans le mois

2 (deuxièmes Wed. En july)

w

Semaine dans année

40

W

Semaine dans le mois

1

a

Marqueur AM / PM

PM

k

Heure de la journée (1 ~ 24)

24

K

Heure en AM / PM (0 ~ 11)

10

Z

Fuseau horaire

Heure normale de l'Est

'

Escape for text

Delimiteur

"

Simple quote

`

Formatage de date à l'aide de printf

Le formatage de la date et de l'heure peut être effectué très facilement en utilisant la méthode printf. Vous utilisez un format à deux lettres, commençant par t et se terminant par l'une des lettres du tableau ci-dessous. Par exemple:

import java.util.Date;
public class DateDemo {
  public static void main(String args[]) {
     //Instantiate a Date object
     Date date = new Date();
     //display time and date using toString()
     String str = String.format("Current Date/Time : %tc", date );
     System.out.printf(str);
  }
}

 Cela produirait le résultat suivant:

Current Date/Time : Mon Aug 21 16:37:57 MST 2017

Ce serait un peu idiot si vous deviez fournir plusieurs fois la date pour formater chaque partie. Pour cette raison, une chaîne de format peut indiquer l'index de l'argument à mettre en forme.

L'indice doit immédiatement suivre le signe % et il doit être résilié par un $. Par exemple:

import java.util.Date;
public class DateDemo {
   public static void main(String args[]) {
       //Instantiate a Date object
       Date date = new Date();
       //display time and date using toString()
       System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
   }
}

Cela produirait le résultat suivant:

Due date: February 09, 2017

Alternativement, vous pouvez utiliser le <drapeau. Il indique que le même argument que dans la spécification de format précédente devrait être utilisé à nouveau. Par exemple:

import java.util.Date;
public class DateDemo {
   public static void main(String args[]) {
       // Instantiate a Date object
       Date date = new Date();       
       // display time and date using toString()
       System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
   }
}

 Cela produirait le résultat suivant:

Due date: February 09, 2017

Caractères de conversion de date et heure

Code

La description

Exemple

c

Date et heure complètes

Mon Aug 04 09:51:52 CDT 2017

F

Date ISO 8601

2017-08-21

D

Date au format Américain (mois/jour/année)

02/09/2004

T

Heure sous format 24 heures

18:05:19

r

Heure sous format 12 heures

06:05:19 pm

R

Heure sous format 24 heures, sans la seconde

18:05

Y

Année à quatre chiffres (avec des zéros de pointe)

2004

Y

Les deux derniers chiffres de l'année (avec les zéros principaux)

04

C

Les deux premiers chiffres de l'année

20

B

Nom complet du mois

August

B

Nom abrégé du mois

Aug

M

Mois à deux chiffres (avec des zéros principaux)

02

D

Jour à deux chiffres (avec zéros principaux)

03

E

Jour à deux chiffres (sans zéro au départ)

9

A

Nom complet du jour de la semaine

Monday

A

Nom abrégé du jour de la semaine

Mon

J

Jour à trois chiffres de l'année

069

H

Heure à deux chiffres (avec zéros principaux), entre 00 et 23

18

K

Heure à deux chiffres (sans zéro avant), entre 0 et 23

18

I

Heure à deux chiffres (avec zéros principaux), entre 01 et 12

06

L

Heure à deux chiffres (sans zéros avant), entre 1 et 12

6

M

Minutes à deux chiffres (avec des zéros avant)

05

S

Secondes à deux chiffres (avec des zéros avant)

19

L

Millisecondes à trois chiffres (avec des zéros de pointe)

047

N

Nanosecondes à neuf chiffres (avec zéros avant)

047000000

P

Marque majuscule ou après-midi

PM

P

Marqueur minuscule ou après-midi

Pm

Z

RFC 822 numérotation  numérique depuis GMT

-0800

Z

Fuseau horaire

TVP

S

Secondes depuis 1970-01-01 00:00:00 GMT

1078884319

Q

Millisecondes depuis 1970-01-01 00:00:00 GMT

1078884319047

Il existe d'autres classes utiles liées à la date et à l'heure. Pour plus de détails, vous pouvez vous référer à la documentation Java Standard.

Analyse des chaînes en dates

La classe SimpleDateFormat comporte des méthodes supplémentaires, notamment parse( ), qui tente d'analyser une chaîne selon le format stocké dans 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);
      }
   }
}

Un exemple de fonctionnement du programme ci-dessus produirait le résultat suivant:

> 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

Mettre en pause pendant un temps

Vous pouvez mettre en pause pendant une période de temps allant d'une milliseconde à la durée de vie de votre ordinateur. Par exemple, le programme suivant durerait 10 secondes:

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

Cela produirait le résultat suivant:

Sun May 03 18:04:41 GMT 2009

 

Sun May 03 18:04:51 GMT 2009

Mesure du temps écoulé

Parfois, vous devrez peut-être mesurer le point dans des millisecondes. Reprenons à nouveau l'exemple ci-dessus:

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!");
      }
   }
}

Cela produirait le résultat suivant:

Sun May 03 18:16:51 GMT 2009

 

Sun May 03 18:16:57 GMT 2009

 

Difference is : 5993

Classe GregorianCalendar

GregorianCalendar est une implémentation concrète de la classe Calendar qui implémente le calendrier grégorien normal avec lequel vous êtes familier. Je n'ai pas discuté de la classe Calendar dans ce cours, vous pouvez consulter la documentation Java standard pour cela.

La méthode getInstance( ) de Calendar renvoie un GregorianCalendar  initialisé avec la date et l'heure actuelles dans les paramètres régionaux et le fuseau horaire par défaut. GregorianCalendar définit deux champs: AD et BC. Ceux-ci représentent les deux époques définies par le calendrier grégorien.

Il existe également plusieurs constructeurs pour les objets GregorianCalendar :

SN

Constructeur avec description

1

GregorianCalendar( ) 
Construit un calendrier Gregorian par défaut en utilisant l'heure actuelle dans le fuseau horaire par défaut avec les paramètres régionaux par défaut.

2

GregorianCalendar(int year, int month, int date) 
Construit un calendrier grégorien avec la date donnée définie dans le fuseau horaire par défaut avec les paramètres régionaux par défaut.

3

GregorianCalendar(int year, int month, int date, int hour, int minute) 
Construit un calendrier grégorien avec la date et l'heure données pour le fuseau horaire par défaut avec les paramètres régionaux par défaut.

4

GregorianCalendar(int year, int month, int date, int hour, int minute, int second)
Construit un calendrier grégorien avec la date et l'heure données pour le fuseau horaire par défaut avec les paramètres régionaux par défaut.

5

GregorianCalendar(Locale aLocale)
Construit un calendrier grégorien basé sur l'heure actuelle dans le fuseau horaire par défaut avec les paramètres régionaux donnés.

6

GregorianCalendar(TimeZone zone) 

Construit un calendrier grégorien en fonction de l'heure actuelle dans le fuseau horaire donné avec les paramètres régionaux par défaut.

7

GregorianCalendar(TimeZone zone, Locale aLocale)
Construit un calendrier grégorien en fonction de l'heure actuelle dans le fuseau horaire donné avec les paramètres régionaux donnés.

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

SN

Méthodes avec description

1

void add(int field, int amount) 
Ajoute le délai spécifié (signé) au champ de temps donné, en fonction des règles du calendrier.

2

protected void computeFields()
Convertit UTC en millisecondes en valeurs de champs temporels.

3

Protected void computeTime() 
Redéfinition de Calendar. Convertit les valeurs de champs temporels en UTC en millisecondes.

4

boolean equals(Object obj) 
Comparez ce GregorianCalendar à une référence d'objet.

5

int get(field int ) 
Obtient la valeur pour un champ de temps donné.

6

int getActualMaximum(int field) 
Renvoie la valeur maximale que ce champ pourrait avoir, compte tenu de la date actuelle.

7

int getActualMinimum(int field) 
Renvoie la valeur minimale que ce champ pourrait avoir, compte tenu de la date actuelle.

8

int getGreatestMinimum(int field) 
Renvoie la valeur minimale la plus élevée pour le champ donné si elle varie.

9

Date getGregorianChange( ) 
Obtient la date de modification du Calendrier Grégorien.

10

int getLeastMaximum(int field) 
Renvoie la valeur maximale la plus basse pour le champ donné si elle varie.

11

int getMaximum(int field) 
Renvoie la valeur maximale pour le champ donné.

12

Date getTime( ) 
Obtient le temos actuel de ce calendrier.

13

long getTimeInMillis() 
Obtient le temps actuel de ce calendrier comme un type long.

14

TimeZone getTimeZone( ) 
Obtient le fuseau horaire.

15

int getMinimum(int field) 
Renvoie la valeur minimale pour le champ donné.

16

int hashCode() 
redéfinition de la méthode hashCode .

17

boolean isLeapYear(int year) 
Détermine si l'année donnée est une année bissextile.

18

void roll (int field, boolean up) 
Ajoute ou soustrait (haut / bas) une seule unité de temps sur le champ de temps donné sans changer de champs plus importants.

19

void set(int field, int value) 
Définit le champ de trmps avec la valeur donnée.

20

void set(int year, int month, int date)
Définit les valeurs pour les champs année, mois et date.

21

void set(int year, int month, int date, int hour, int minute) 

Définit les valeurs pour les champs année, mois, date, heure et minute.

22

void set(int year, int month, int date, int hour, int minute, int second) 
Définit les valeurs pour les champs année, mois, date, heure, minute et seconde.

23

void setGregorianChange(Date date)
Définit la date de modification du calendrier grégorien .

24

void setTime(Date date)
Définit l'heure actuelle de ce calendrier avec la Date donnée.

25

void setTimeInMillis(long millis)
Définit l'heure actuelle de ce calendrier à partir de la valeur longue donnée.

26

void setTimeZone(TimeZone value) 

Définit le fuseau horaire avec la valeur du fuseau horaire donné.

27

String toString( ) 
Renvoie une représentation de chaîne de ce calendrier.

Exemple:

import java.util.*;
public class GregorianCalendarDemo {
   public static void main(String args[]) {
      String months[] = {
      "Jan", "Feb", "Mar", "Apr",
      "May", "Jun", "Jul", "Aug",
      "Sep", "Oct", "Nov", "Dec"};
     
      int year;
      //Create a Gregorian calendar initialized
      //with the current date and time in the
      //default locale and timezone.
      GregorianCalendar gcalendar = new GregorianCalendar();
      //Display current time and date information.
      System.out.print("Date: ");
      System.out.print(months[gcalendar.get(Calendar.MONTH)]);
      System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
      System.out.println(year = gcalendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(gcalendar.get(Calendar.HOUR) + ":");
      System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
      System.out.println(gcalendar.get(Calendar.SECOND));
     
      //Test if the current year is a leap year
      if(gcalendar.isLeapYear(year)) {
         System.out.println("The current year is a leap year");
      }
      else{
         System.out.println("The current year is not a leap year");
      }
   }
}

Cela produirait le résultat suivant:

Date: Apr 22 2009

Time: 11:25:27

The current year is not a leap year

 Pour une liste complète de constantes disponibles dans la classe Calendar, vous pouvez vous référer à la documentation Java standard.

 




Vous êtes ici :
Accueil Cours Programmations La Programmation Orientée Objet en Java Date et heure