Vidéo: Additionner ou soustraire une date 2024
Tout comme vous ne pouvez pas utiliser les opérateurs de comparaison intégrés de Java avec des dates, vous ne pouvez pas non plus utiliser d'opérateurs mathématiques intégrés. Au lieu de cela, vous pouvez effectuer l'addition et la soustraction sur les dates en utilisant les méthodes
plus
et
moins
, et vous pouvez déterminer la différence entre deux dates en utilisant la méthode
jusqu'à
.
Un fait important à prendre en compte lors des calculs de date et d'heure est que les objets date-heure sont immuables. Cela signifie qu'une fois que vous créez un objet date-heure, vous ne pouvez pas modifier sa valeur. Lorsque vous effectuez un calcul sur un objet date-heure, le résultat est un nouvel objet date-heure avec une nouvelle valeur.
Les méthodes
plus
et
moins
vous permettent d'ajouter différentes unités de date et d'heure à un objet date-heure. Il existe quatre variantes pour chacune des classes
LocalDate
, ce qui vous permet d'ajouter ou de soustraire des années, des mois, des semaines et des jours à un objet
LocalDate
. Le code suivant imprime la date actuelle, la date de demain et la date une semaine, un mois et un an à partir de maintenant:
Système. en dehors. println ("Aujourd'hui:" + LocalDate. now ());
Système. en dehors. println ("Demain:" + LocalDate. now (). plusDays (1));
Système. en dehors. println ("La semaine prochaine:" + LocalDate. now (). plusWeeks (1));
Système. en dehors. println ("Mois suivant:" + LocalDate maintenant (). plusMonths (1));
Système. en dehors. println ("Année suivante:" + LocalDate. now (). plusYears (1));
Pour déterminer la différence entre deux dates, utilisez la méthode
jusqu'à
. Il calcule la différence entre une date et la date passée en tant que premier paramètre, mesurée dans les unités indiquées par le deuxième paramètre. Par exemple, le code suivant détermine le nombre de jours entre le 16 mai 2014 et le 15 décembre 2014:
LocalDate date1 = DateDate. analyser ("2014-05-16");
LocalDate date2 = DateDate. analyser ("2014-12-15");
Système. en dehors. println (date1 jusqu'à (date2, ChronoUnit.DAYS));
Certains calculs de date peuvent être un peu plus complexes. Par exemple, considérons une entreprise qui prépare des factures le 15 de chaque mois. L'extrait de code suivant affiche le nombre de jours entre la date actuelle et la date de facturation suivante:
LocalDate today = LocalDate. à présent();
LocalDate invDate = LocalDate. de (aujourd'hui, getYear (),
aujourd'hui. getMonthValue (), 15);
if (aujourd'hui, getDayOfMonth ()> 15)
invDate = invDate. plusMonths (1);
long daysToInvoice = aujourd'hui. jusqu'à (invDate,
ChronoUnit. DAYS);
Système. en dehors. println (daysToInvoice
+ "jusqu'à la prochaine date de facturation.");
Cet exemple fonctionne en obtenant d'abord la date actuelle, puis en créant un nouvel objet
LocalDate
représentant le 15 du mois en cours. Ensuite, si le jour actuel du mois est supérieur à 15, il ajoute un mois à la date de facturation. En d'autres termes, si c'est le 16e ou plus tard, la facturation a lieu le 15 du mois suivant, pas ce mois-ci. Ensuite, il utilise la méthode
jusqu'à
pour déterminer le nombre de jours entre la date actuelle et la prochaine date de facturation.
ChronoUnit
est une énumération qui définit les différentes unités de temps pouvant être utilisées dans les calculs de date et d'heure. Les valeurs possibles sont:
SIÈCLES
JOURS
DÉCENNIES
ERAS
POUR TOUJOURS
DEMI-JOURS
HEURES
MICROS
MILLENNIA
MILLIS
MINUTES
MOIS
NANOS
SECONDS
SEMAINES
ANNÉES
La plupart d'entre elles sont explicites, mais deux d'entre elles sont un peu particulières:
-
ERA
indique si la date se réfère à l'ère commune (CE, également connu comme AD) ou avant l'ère (BCE, également connu sous le nom de BC). -
FOREVER
représente la plus grande valeur pouvant être représentée comme une durée. Malheureusement, Java ne vous laissera pas vivre pour toujours. Le code suivant lève une exception:
LocalDate birthday = LocalDate. analyser ("1959-05-16);
anniversaire = anniversaire. plus (1, ChronoUnit FOREVER);
Notez que
ChronoUni
t est dans le
java. temps. paquetage temporal
, veillez donc à inclure l'instruction suivante en haut de tout programme utilisant
ChronoUnit
:
import java. temps. temporel. *;