Utilisez soit Joda-Time ou le nouveau package java.time en Java 8.
Les deux cadres utilisent l'demi-approche ouverte où le début est inclus alors que la fin est exclusive. Parfois notée comme [)
. C'est généralement la meilleure approche pour définir les intervalles de temps.
java.time
Le cadre java.time construit en Java 8 et a plus tard une classe Period
pour représenter un laps de temps comme un certain nombre d'années, un certain nombre de mois, et un certain nombre de jours. Mais cette classe est limitée à des jours entiers, aucune représentation des heures, des minutes et des secondes.
Notez que nous spécifions un fuseau horaire, crucial pour déterminer une date. Par exemple, un nouveau jour apparaît plus tôt dans Paris que dans Montréal.
ZoneId zoneId = ZoneId.of("America/Montreal");
LocalDate now = LocalDate.now(zoneId);
LocalDate then = LocalDate.of(2001, 1, 1);
Period period = Period.between(then, now);
Puis: 2001-01-01. Maintenant: 2015-09-07. Période: P14Y8M6D. Jours: 5362
Pour des jours entiers, alors Daylight Saving Time (DST) est sans importance.
Si vous souhaitez connaître le nombre total de jours, utilisez l'énumération ChronoUnit
qui inclut des méthodes de calcul. Notez que les calculs reviennent longtemps.
long days = ChronoUnit.DAYS.between(then, now); // "5362" seen above.
I have asked à faire une période complète à java.time, y compris les heures, minutes, secondes. Pas possible à partir de Java 8. Une solution de contournement surprenante utilisant les bibliothèques groupées was suggested par Meno Hochschild: Utilisez une classe Duration
trouvée dans le javax.xml.datatype package.
Joda-Time
Voici quelques exemples de code dans Joda-Time 2.3.
DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris");
DateTime start = new DateTime(2014, 1, 2, 3, 4, 5, timeZone);
DateTime stop = new DateTime(2014, 5, 2, 3, 4, 5, timeZone);
Period period = new Period(start, stop);
appel toString
vous obtiendrez une représentation de chaîne sous la forme définie par la norme ISO 8601, PnYnMnDTnHnMnS
.
Voir http://www.xmission.com/~goodhill/dates/deltaDates.html pour quelques informations. –
C'est un bon article. Merci! – Anirudh
@Anirudh Recherche StackOverflow pour "joda" et terme tel que "span", "intervalle", "durée", "période". Vous trouverez de nombreux exemples avec discussion. –