Modifier une date avec Calendar
La class Calendar encapsule une date sous la forme d'une variable long et dispose de fonctions pour modifier une date en fonction d'un fuseau horaire.Afficher la date du jour
Commençons par la première étape, quel jour sommes nous aujourd'hui ? Pour transformer la date qui en un Long en en un string que tout le monde peut lire, nous utilisons la fonction SimpleDateFormat.
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* Ajouter ou soustraire des jours a une date
* http://www.fobec.com/java/968/ajouter-soustraire-jours-une-date.html
* Axel 2010
*/
public class CalendarCalc {
public static void main(String[] args) {
//utiliser le calendrier par défaut
Calendar calendar = Calendar.getInstance();
//définir le format de la date
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
//Afficher la date du joru
System.out.println("Aujourd'hui, nous sommes le: "+sdf.format(calendar.getTime()));
//Résultat: Aujourd'hui, nous sommes le: 19/08/2010
}
}
Pour les opérations sur les dates, Calendar dispose des constantes suivantes:
Calendar.DATE: ajouter/soustraire un jour
Calendar.MONTH: ajouter/soustraire un mois
Calendar.YEAR: ajouter/soustraire une année
En 2ème paramètre de la fonction Add de Calendar, un nombre positif ajouter une durée, un nombre négatif soustrait une durée.
Ajouter des jours
Dans une semaine, soit 7 jours, quelle sera la date du jour ? Avec l'objet Calendar, l'ajout de jour est réalisé avec la fonction add et le nombre de jour à ajouter.
calendar.add(Calendar.DATE, 7);
System.out.println("Dans une semaine, nous serons le: "+sdf.format(calendar.getTime()));
//résultat: Dans une semaine, nous serons le: 26/08/2010
Soustraire un mois
Pour retirer un nombre de jour à une date, le principe reste le même: passer le nombre de jour en paramètre de la fonction add. Par contre, pour une durée d'un ou plusieurs, ca se complique car un mois peut avoir une durée différente 28 jours, 30 jours ou 31 jours. L'astuce consiste à utiliser la constante Calendar.MONTH.
calendar.add(Calendar.MONTH, -6);
System.out.println("Il y a 6 mois, nous étions le: "+sdf.format(calendar.getTime()));
//résultat: Il y a 6 mois, nous étions le: 19/02/2010
Au lieu de s'amuser à additionner des milisecondes à un TimeStamp, je vous conseille de passer par la class Calendar. Les opérations d'ajout et de soustraction de jour sur une date deviennent simple à réaliser