La cause de ce problème est déjà mentionnée dans Réponse d'Andreas .
La question est ce que exactement ce que vous voulez compter. Le fait que vous déclariez que la différence réelle devrait être de 29 au lieu de 28, et que vous demandiez si "L'emplacement/le temps de zone pourrait être un problème" révèle ce que vous voulez réellement compter. Apparemment, vous voulez vous débarrasser de toute différence de fuseau horaire.
Je suppose que vous voulez seulement calculer les jours, sans l'heure et le fuseau horaire.
Java 8
Ci-dessous, dans l'exemple de la façon dont le nombre de jours d'intervalle pourrait être calculé correctement, j'utilise une classe qui représente exactement cela - une date sans heure ni fuseau horaire -. LocalDate
.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d-MM-yyyy HH:mm:ss");
LocalDate start = LocalDate.parse("1-03-2020 00:00:00", formatter);
LocalDate end = LocalDate.parse("30-03-2020 00:00:00", formatter);
long daysBetween = ChronoUnit.DAYS.between(start, end);
Notez que ChronoUnit
, DateTimeFormatter
et LocalDate
nécessitent au moins Java 8, ce qui n'est pas le cas pour vous, d'après le site Web de la Commission européenne. java-7 étiquette. Cependant, elle l'est peut-être pour les futurs lecteurs.
Comme l'a mentionné Ole V.V., il y a aussi le Sac à dos ThreeTen qui reporte la fonctionnalité de l'API Date et Heure de Java 8 vers Java 6 et 7.