devstory

Le Tutoriel de Java Date, Time

  1. Les classes Date, time, calendar en Java
  2. System.currentTimeMillis()
  3. TimeUnit
  4. java.util.Date
  5. Date, Time, Timestamp (java.sql)
  6. java.util.Calendar
  7. Convertir entre la Date et le Calendrier
  8. DateFormat & SimpleDateFormat

1. Les classes Date, time, calendar en Java

Java fournit quelques classes liées au temps et au calendrier (Calendar), ci-dessous une liste de cette classe :

Classe

Description

java.util.Date
Une classe représente la date, le mois, l'année et l'heure. Malheureusement, la plupart de ses méthodes sont obsolètes. Il est recommandé de ne pas utiliser ces méthodes, pourtant la classe Date est encore largement utilisée.
java.util.concurrent.TimeUnit
TimeUnit est un Enum qui décrit la date, le mois, l'année des unités.
java.sql.Date
Une classe décrivant la date, le mois, l'année. Toutes les informations du temps sont coupées. Cette classe est souvent utilisée dans JDBC.
java.sql.Time
Une classe décrit l'heure (heures, minutes, secondes, millisecondes) et ne contient pas d'informations sur la date, le mois, l'année. Cette classe est généralement utilisée dans JDBC.
java.sql.Timestamp
Une classe représente la date, le mois, l'année et l'heure. Cette classe est souvent utilisée dans JDBC.
java.util.Calendar
La classe décrit le calendrier. Il a des méthodes mathématiques du temps, comme l'ajout de jours, moins de jours, etc.
java.util.GregorianCalendar
Est une sous-classe directe de java.util.Calendar directement, décrivant le jour du calendrier, le calendrier est largement utilisé dans le monde d'aujourd'hui. Il a toutes les méthodes de java.util.Calendar pour manipuler les mathématiques sur la date, le mois, l'année et l'heure.
java.util.TimeZone
TimeZone est une classe qui décrit le fuseau horaire, ce qui est utile lorsque vous travaillez avec Calendar dans les fuseaux horaires.
java.text.SimpleDateFormat
Cette classe vous permet de passer un String qui a un format de date et de mois au type Date et vice versa

2. System.currentTimeMillis()

currentTimeMillis() est une méthode statique de la classe System. Elle renvoie le montant de temps en millisecondes de la date du 1er janvier 1971 jusqu'à nos jours.
System.currentTimeMillis() est généralement utilisé pour mesurer le temps de faire quelque chose en appelant cette méthode avant de commencer les travaux et après avoir terminé le travail.
JobTimeDemo.java
package org.o7planning.tutorial.dt;

public class JobTimeDemo {

	// C'est la méthode de calcul de la somme des nombres de 1 à 100.
	private static int sum() {
		int sum = 0;
		for (int i = 0; i <= 100; i++) {
			sum += i;
		}
		return sum;
	}

	private static void doJob(int count) {
		// Appelez la méthode 'sum' avec le nombre des fois données par le paramètre.
		for (int i = 0; i < count; i++) {
			sum();
		}
	}

	public static void main(String[] args) {
		long millis1 = System.currentTimeMillis();

		doJob(10000);

		long millis2 = System.currentTimeMillis();

		long distance = millis2 - millis1;

		System.out.println("Distance time in milli second: " + distance);
	}
}
Les résultats d'exécution de l'exemple :
Distance time in milli second: 3

3. TimeUnit

TimeUnit est un Enum, il est entré de Java5. Il a certaines méthodes de commutation entre les unités de temps et il est utile dans quelques situations.
// Nombre de minutes.
int minute = 5;

// Convertir le nombre de minutes en millisecondes.
// C'est la manière d'utilisation traditionnelle.
int millisecond = minute * 60 * 1000;

// ​​​​​​​
// Utiliser TimeUnit :
long millisecond = TimeUnit.MINUTES.toMillis(minute);
Certaines méthodes de TimeUnit
// Convertir en nanosecondes. 
public long toNanos(long d);

// Convertir en microsecondes
public long toMicros(long d);

// Convertir en millisecondes
public long toMillis(long d);

// Convertir en secondes 
public long toSeconds(long d);

// Convertir en minutes
public long toMinutes(long d);

// Convertir en heures
public long toHours(long d);

// Convertir à jour
public long toDays(long d) ;

// Convertir en une autre unité de temps, donnée par le paramètre 'u'
public long convert(long d, TimeUnit u);
Exemple :
TimeUnitConvertDemo.java
package org.o7planning.tutorial.timeunit;

import java.util.concurrent.TimeUnit;

public class TimeUnitConvertDemo {

	public static void main(String[] args) {

		// Secondes
		long second = 125553;

		// Convertir le nombre de secondes en minutes(Minute)
		long minute = TimeUnit.MINUTES.convert(second, TimeUnit.SECONDS);
		System.out.println("Minute " + minute);

		// Convertir le nombre de secondes en heures.
		long hour = TimeUnit.HOURS.convert(second, TimeUnit.SECONDS);
		System.out.println("Hour " + hour);

		System.out.println("------");

		// Convertir 3 jours en minutes.
		minute = TimeUnit.DAYS.toMinutes(3);

		System.out.println("Minute " + minute);

		// Convertir 3 jours en heure.
		hour = TimeUnit.DAYS.toHours(3);

		System.out.println("Hour " + hour);
	}

}

Résultats d'exécution de l'exemple :
Minute 2092
Hour 34
------
Minute 4320
Hour 72

4. java.util.Date

java.util.Date est l'une de la classe qui décrite le temps de Java. Malheureusement, la plupart de ses méthodes sont obsolètes et au lieu d'utiliser, on peut utiliser les méthodes de java.util.Calendar à la place. Mais vous pouvez toujours utiliser java.util.Date pour décrire les dates.
Il y a seulement 2 constructeurs (constructeur) qui peuvent être utilisés :
// Créer un objet Date qui décrit l'heure actuelle.
Date date1 = new Date();

// ​​​​​​​
// Créer un objet Date de temps en temps en millisecondes à partir de 1-1-1970.
long millis = .....;
Date date2 = new Date(millis);
DateDemo.java
package org.o7planning.tutorial.date;

import java.util.Date;
import java.util.concurrent.TimeUnit;

public class DateDemo {

	public static void main(String[] args) throws InterruptedException {

		// Créer un objet Date qui décrit l'heure actuelle.
		Date date1 = new Date();

		// Pauser pour une période de 3 secondes.
		Thread.sleep(TimeUnit.SECONDS.toMillis(3));

		// Renvoyer le nombre de millisecondes depuis le 1er janvier 1970 jusqu'à ce jour.
		long millis = System.currentTimeMillis();
		Date date2 = new Date(millis);

		// Comparer deux objets date1 et date2.
		// i <0 signifie date1 <date2
		// i = 0 signifie date1 = date2
		// i> 0 signifie date1> date2
		int i = date1.compareTo(date2);

		System.out.println("date1 compareTo date2 = " + i);

		// Vérifier si date1 a précédé date2.
		boolean before = date1.before(date2);

		System.out.println("date1 before date2 ? " + before);

		// Vérifier que date1 est après date2.
		boolean after = date1.after(date2);

		System.out.println("date1 after date2 ? " + after);
	}

}
Résultats d'exécution de l'exemple
date1 compareTo date2 = -1
date1 before date2 ? true
date1 after date2 ? false

5. Date, Time, Timestamp (java.sql)

java.sql a trois classes relatives à la date, le mois et le temps :
  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp
Spécifiquement :
  • java.Sql.Date correspond à SQL DATE, ce qui signifie qu'il ne stocke que l'année, le mois, le jour et et ignorer l'heure, minutes, secondes et millisecondes. Aditionellement de java.sql.Date ne contient pas d'informations sur le fuseau horaire.
  • java.sql.Time correspond à SQL TIME et ne contient que des informations sur les heures, les minutes, les secondes, les millisecondes.
  • java.sql.Timestamp correspond à SQL TIMESTAMP, il est précis en nanosecondes (note: java.util.Date supporte à seulement millisecondes!) avec une précision personnalisée.
Les classes au-dessus participent à PreparedStatement dans JDBC API, par exemple les méthodes setDate, setTime, setTimestamp. Ou peut-être récupéré à partir ResultSet.

6. java.util.Calendar

Résumé des calendriers :
Gregorian Calendar: Ceci est le calendrier, aussi appelé le calendrier chrétien, est le calendrier international. Il est le plus largement utilisé est nommé d'après le Pape GregoryXIII, qui l'a introduit en 1582.
Buddhist Calendar: C'est un calendrier bouddhiste, couramment utilisé dans certains pays d'Asie du Sud-Est tels que la Thaïlande, le Laos, le Cambodge et le Sri Lanka. Ce calendrier est maintenant utilisé dans les festivals bouddhistes. Et aucun autre pays utilise ce calendrier officiellement, ces pays ont changé utiliser le Grégorien Calendar. Vous pouvez référencer les informations sur ce calendrier à :
Japanese Imperial Calendar : C'est un calendrier traditionnel du Japan, de nos jours le Japon est passé au calendrier Grégorien(Gregorian Calendar), mais le calendrier traditionnel est encore utilisé non officielle
Calendar est la classe qui simule un système de calendrier.
Calendar a quelques sous-classes :
  • GregorianCalendar
  • JapaneseImperialCalendar
  • BuddhistCalendar
Calendar est une classe abstraite. Ce qui signifie que vous ne pouvez pas initialiser de contructeur (Constructor). Cependant, il y a deux méthodes statiques pour créer des objets Calendrier
public static Calendar getInstance();

public static Calendar getInstance(TimeZone zone);

public static Calendar getInstance(Locale aLocale);

public static Calendar getInstance(TimeZone zone,Locale aLocale);
Exemple :
// Créez un objet Calendar qui décrit l'heure actuelle.
// Avec Locale par défaut et TimeZone (Fuseau horaire) par défaut
// (De l'ordinateur en cours d'exécution).
Calendar c = Calendar.getInstance();
Lorsque vous utilisez Calendar.getInstance (TimeZone, Locale) il renvoie l'une des classes enfant ci-dessus. Ce qui renvoie principalement GregorianCalendar.

Appelez Calendar.getInstance () renvoie l'objet de Calendrier avec le paramètre TimeZone, selon votre ordinateur et la Locale par défaut
Observez le code de classe Calendar (JDK7) :
Calendar (JDK7)
/**
* Gets a calendar using the default time zone and locale. The
* <code>Calendar</code> returned is based on the current time
* in the default time zone with the default locale.
*
* @return a Calendar.
*/
public static Calendar getInstance()
{
  Calendar cal = createCalendar(TimeZone.getDefaultRef(),
                                  Locale.getDefault(Locale.Category.FORMAT));
  cal.sharedZone = true;
  return cal;
}

/**
* Gets a calendar using the specified time zone and default locale.
* The <code>Calendar</code> returned is based on the current time
* in the given time zone with the default locale.
*
* @param zone the time zone to use
* @return a Calendar.
*/
public static Calendar getInstance(TimeZone zone)
{
  return createCalendar(zone, Locale.getDefault(Locale.Category.FORMAT));
}

/**
* Gets a calendar using the default time zone and specified locale.
* The <code>Calendar</code> returned is based on the current time
* in the default time zone with the given locale.
*
* @param aLocale the locale for the week data
* @return a Calendar.
*/
public static Calendar getInstance(Locale aLocale)
{
  Calendar cal = createCalendar(TimeZone.getDefaultRef(), aLocale);
  cal.sharedZone = true;
  return cal;
}

/**
* Gets a calendar with the specified time zone and locale.
* The <code>Calendar</code> returned is based on the current time
* in the given time zone with the given locale.
*
* @param zone the time zone to use
* @param aLocale the locale for the week data
* @return a Calendar.
*/
public static Calendar getInstance(TimeZone zone,
                                 Locale aLocale)
{
  return createCalendar(zone, aLocale);
}

private static Calendar createCalendar(TimeZone zone,
                                     Locale aLocale)
{
  Calendar cal = null;

  String caltype = aLocale.getUnicodeLocaleType("ca");
  if (caltype == null) {
      // Calendar type is not specified.
      // If the specified locale is a Thai locale,
      // returns a BuddhistCalendar instance.
      if ("th".equals(aLocale.getLanguage())
              && ("TH".equals(aLocale.getCountry()))) {
          cal = new BuddhistCalendar(zone, aLocale);
      } else {
          cal = new GregorianCalendar(zone, aLocale);
      }
  } else if (caltype.equals("japanese")) {
      cal = new JapaneseImperialCalendar(zone, aLocale);
  } else if (caltype.equals("buddhist")) {
      cal = new BuddhistCalendar(zone, aLocale);
  } else {
      // Unsupported calendar type.
      // Use Gregorian calendar as a fallback.
      cal = new GregorianCalendar(zone, aLocale);
  }

  return cal;
}
Certaines méthodes importantes :

Method get(int)

Return

get(Calendar.DAY_OF_WEEK)
1 (Calendar.SUNDAY) to 7 (Calendar.SATURDAY).
get(Calendar.YEAR)
year
get(Calendar.MONTH)
0 (Calendar.JANUARY) to 11 (Calendar.DECEMBER).
get(Calendar.DAY_OF_MONTH)
1 to 31
get(Calendar.DATE)
1 to 31
get(Calendar.HOUR_OF_DAY)
0 to 23
get(Calendar.MINUTE)
0 to 59
get(Calendar.SECOND)
0 to 59
get(Calendar.MILLISECOND)
0 to 999
get(Calendar.HOUR)
0 to 11, to be used together with Calendar.AM_PM.
get(Calendar.AM_PM)
0 (Calendar.AM) or 1 (Calendar.PM).
get(Calendar.DAY_OF_WEEK_IN_MONTH)
DAY_OF_MONTH 1 through 7 always correspond to DAY_OF_WEEK_IN_MONTH 1;

8 through 14 correspond to DAY_OF_WEEK_IN_MONTH 2, and so on.
get(Calendar.DAY_OF_YEAR)
1 to 366
get(Calendar.ZONE_OFFSET)
GMT offset value of the time zone.
get(Calendar.ERA)
Indicate AD (GregorianCalendar.AD), BC (GregorianCalendar.BC).
CalendarFieldsDemo.java
package org.o7planning.tutorial.calendar;

import java.util.Calendar;

public class CalendarFieldsDemo {

	public static void main(String[] args) {
		// Créer un objet Calendrier (Calendrier) par défaut.
		// Avec time zone (fuseau horaire) et locale par défaut.
		Calendar c = Calendar.getInstance();
		int year = c.get(Calendar.YEAR);

		// Renvoyer des valeurs de 0 à 11
		int month = c.get(Calendar.MONTH);
		int day = c.get(Calendar.DAY_OF_MONTH);
		int hour = c.get(Calendar.HOUR_OF_DAY);
		int minute = c.get(Calendar.MINUTE);
		int second = c.get(Calendar.SECOND);
		int millis = c.get(Calendar.MILLISECOND);

		System.out.println("Year: " + year);
		System.out.println("Month: " + (month + 1));
		System.out.println("Day: " + day);
		System.out.println("Hour: " + hour);
		System.out.println("Minute: " + minute);
		System.out.println("Second: " + second);
		System.out.println("Minute: " + minute);
		System.out.println("Milli Second: " + millis);

	}

}
Exécution de l'exemple :

Year: 2021
Month: 5
Day: 15
Hour: 20
Minute: 34
Second: 52
Minute: 34
Milli Second: 382
Certaines méthodes de Calendar :
void set(int calendarField, int value)
void set(int year, int month, int date)
void set(int year, int month, int date, int hour, int minute, int second)

// Ajouter ou soustraire une période de temps sur un champ (field) de Calendar.
// Basé sur les règles du Calendrier.
void add(int field, int amount)

// Rouler (haut / bas) un champ de Calendrier.
// roll(): n'affecte pas les autres champs du Calendrier.
void roll(int calendarField, boolean up)

// Rouler (haut / bas) un champ de Calendrier.
// roll(): n'affecte pas les autres champs du Calendrier.
void roll(int calendarField, int amount):

// ​​​​​​​
// Revoyer l'objet Date en fonction de la valeur de Calendar.
Date getTime()

void setTime(Date date)

// Renvoyer la milliseconde de cet objet Calendar.
long getTimeInMills():

void setTimeInMillis(long millis)

void setTimeZone(TimeZone value)
CalendarDemo.java
package org.o7planning.tutorial.calendar;

import java.util.Calendar;

public class CalendarDemo {

	public static void showCalendar(Calendar c) {
		int year = c.get(Calendar.YEAR);

		// Renvoyer des valeurs de 0 à 11
		int month = c.get(Calendar.MONTH);
		int day = c.get(Calendar.DAY_OF_MONTH);
		int hour = c.get(Calendar.HOUR_OF_DAY);
		int minute = c.get(Calendar.MINUTE);
		int second = c.get(Calendar.SECOND);
		int millis = c.get(Calendar.MILLISECOND);

		System.out.println(" " + year + "-" + (month + 1) + "-" + day //
				+ " " + hour + ":" + minute + ":" + second + " " + millis);
	}

	public static void main(String[] args) {
		// Créer l'objet Calendar, décrivant l'heure actuelle.
		// Avec time zone (fuseau horaire) et locale par défaut.
		Calendar c = Calendar.getInstance();

		System.out.println("First calendar info");
		showCalendar(c);

		// roll (..): Fait défiler un champ (field) de Calendar.
		// roll (..): ne changez pas les autres champs.
		// Exemple: Faites défiler vers le haut jusqu'à une heure (boolean up = true)
		c.roll(Calendar.HOUR_OF_DAY, true);

		System.out.println("After roll 1 hour");
		showCalendar(c);

		// roll (..): ne change pas les autres champs du Calendrier.
		// Faites défiler vers le bas une heure (boolean up = false)
		c.roll(Calendar.HOUR_OF_DAY, false);

		System.out.println("After roll -1 hour");
		showCalendar(c);

		// add (..): Peut changer les autres champs du calendrier.
		// Augmenter d'une heure (boolean up = true)
		c.add(Calendar.HOUR_OF_DAY, 1);

		System.out.println("After add 1 hour");
		showCalendar(c);

		// roll (..): ne change pas les autres champs du Calendrier.
		// Faites défiler vers le bas 30 jours.
		c.roll(Calendar.DAY_OF_MONTH, -30);

		System.out.println("After roll -30 day");
		showCalendar(c);

		// add (..): Peut changer les autres champs du Calendar.
		// Ajouter 30 jours.
		c.add(Calendar.DAY_OF_MONTH, 30);
		System.out.println("After add 30 day");
		showCalendar(c);

	}

}
Résultats de l'exécution de l'exemple:

First calendar info
 2021-5-15 20:35:27 395
After roll 1 hour
 2021-5-15 21:35:27 395
After roll -1 hour
 2021-5-15 20:35:27 395
After add 1 hour
 2021-5-15 21:35:27 395
After roll -30 day
 2021-5-16 21:35:27 395
After add 30 day
 2021-6-15 21:35:27 395

7. Convertir entre la Date et le Calendrier

  • Date ==> Calendar
Date now = new Date();

Calendar c = Calendar.getInstance();
c.setTime(now);
  • Calendar ==> Date
Calendar c = Calendar.getInstance();

Date date = c.getTime();
CalendarDateConversionDemo.java
package org.o7planning.tutorial.calendar;

import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;

public class CalendarDateConversionDemo {

	public static void showCalendar(Calendar c) {
		int year = c.get(Calendar.YEAR);

		// Renvoyer les valeurs de 0 à 11
		int month = c.get(Calendar.MONTH);
		int day = c.get(Calendar.DAY_OF_MONTH);
		int hour = c.get(Calendar.HOUR_OF_DAY);
		int minute = c.get(Calendar.MINUTE);
		int second = c.get(Calendar.SECOND);
		int millis = c.get(Calendar.MILLISECOND);

		System.out.println(year + "-" + (month + 1) + "-" + day //
				+ " " + hour + ":" + minute + ":" + second + " " + millis);
	}

	public static void main(String[] args) {

		Calendar c = Calendar.getInstance();

		// year, month, day
		c.set(2000, 11, 24);

		Date date = c.getTime();

		System.out.println("Date " + date);

		long timeInMillis = System.currentTimeMillis();

		// Soustraire 24 heures
		timeInMillis -= TimeUnit.HOURS.toMillis(24);

		Date date2 = new Date(timeInMillis);
		Calendar c2 = Calendar.getInstance();
		c2.setTime(date2);

		showCalendar(c2);

	}

}
Résultats de l'exécution de l'exemple:


Date Sun Dec 24 20:36:10 KGT 2000
2021-5-14 20:36:10 608

8. DateFormat & SimpleDateFormat

  • Date ==> String
Date date = new Date();

DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

String dateString  = df.format(date);
  • String ==> Date
String dateString = "23/04/2005 23:11:59";

DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

Date date = df.parse(dateString);
DateFormatDemo.java
package org.o7planning.tutorial.dateformat;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatDemo {

  public static void main(String[] args) throws ParseException {

      final DateFormat df1 = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

      String dateString1 = "23/04/2005 23:11:59";
      System.out.println("dateString1 = " + dateString1);

      // String ==> Date
      Date date1 = df1.parse(dateString1);

      System.out.println("date1 = " + date1);

      final DateFormat df2 = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

      // Date ==> String.
      String dateString2 = df2.format(date1);

      System.out.println("dateString2 = " + dateString2);
  }
}
Résultats de l'exécution de l'exemple:


dateString1 = 23/04/2005 23:11:59
date1 = Sat Apr 23 23:11:59 KGST 2005
dateString2 = 23-04-2005 23:11:59
Personnaliser les formats de Date, Time
Personnaliser format de Date. Voyez quelques exemples de formats et les résultats renvoyés.
Pattern
Output
dd.MM.yy
30.06.09
yyyy.MM.dd G 'at' hh:mm:ss z
2009.06.30 AD at 08:29:36 PDT
EEE, MMM d, ''yy
Tue, Jun 30, '09
h:mm a
8:29 PM
H:mm
8:29
H:mm:ss:SSS
8:28:36:249
K:mm a,z
8:29 AM,PDT
yyyy.MMMMM.dd GGG hh:mm aaa
2009.June.30 AD 08:29 AM
Le modèle de syntaxe du format Date
Symbol
Meaning
Presentation
Example
G
era designator
Text
AD
y
year
Number
2009
M
month in year
Text & Number
July & 07
d
day in month
Number
10
h
hour in am/pm (1-12)
Number
12
H
hour in day (0-23)
Number
0
m
minute in hour
Number
30
s
second in minute
Number
55
S
millisecond
Number
978
E
day in week
Text
Tuesday
D
day in year
Number
189
F
day of week in month
Number
2 (2nd Wed in July)
w
week in year
Number
27
W
week in month
Number
2
a
am/pm marker
Text
PM
k
hour in day (1-24)
Number
24
K
hour in am/pm (0-11)
Number
0
z
time zone
Text
Pacific Standard Time
'
escape for text
Delimiter
(none)
'
single quote
Literal
'
  • Java Date Time Format Pattern