Le Tutoriel de Java Date, Time

View more Tutorials:

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 :

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 :

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

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 Gregory  XIII , 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 :

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:

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:


8- java.text.DateFormat & java.text.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:


8.1- 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 '

View more Tutorials: