Bonjour,
Je dois effectuer des comparaisons de dates, mais cela devient plus ardu dès que je veux changer le TimeZone. J'espère que des personnes un peu plus expérimentées dans ce domaine pourront répondre à cette épineux problème.
Voici quelqu’un des tests que j’ai déjà réalisés (la date utilisée pour les tests est le 09/05/06 à 11H10 et 53 secondes et les TimeZones sont GMT+0 et GMT+2).
Sortie console :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Calendar cal1 = Calendar.getInstance(tz1); cal1.set(_year, _month, _day, _hour, _minute, _second); Date date1 = cal1.getTime(); Calendar cal2 = Calendar.getInstance(tz2); cal2.set(_year, _month, _day, _hour, _minute, _second); Date date2 = cal2.getTime(); System.out.println("1 - date1 : " + date1 + " (Calendar.HOUR : " + cal1.get(Calendar.HOUR_OF_DAY) + " - " + cal1.getTimeInMillis() + ")"); System.out.println("2 - date2 : " + date2 + " (Calendar.HOUR : " + cal2.get(Calendar.HOUR_OF_DAY) + " - " + cal2.getTimeInMillis() + ")"); System.out.println("3 - comparaison : " + (date1.getTime() == date2.getTime()) + " --> attendu : false"); System.out.println("4 - TimeZone : " + cal1.getTimeZone().getDisplayName() + " et " + cal2.getTimeZone().getDisplayName());
L’inconvénient ici, est que je donne bien 11h dans les deux cas, mais qu’à l’affichage, j’ai 11H et 13H. Les dates ne sont bien évidemment pas identique.1 - date1 : Tue May 09 13:10:53 CEST 2006 (Calendar.HOUR : 11 - 1147173053549)
2 - date2 : Tue May 09 11:10:53 CEST 2006 (Calendar.HOUR : 11 - 1147165853549)
3 - comparaison : false --> attendu : false
4 - TimeZone : GMT+00:00 et GMT+02:00
J’ai remarqué qu’en indiquant le TimeZone après l’appel d’un getTime(), le résultat était différent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 cal1 = Calendar.getInstance(); cal1.set(_year, _month, _day, _hour, _minute, _second); date1 = cal1.getTime(); cal1.setTimeZone(tz1); date1 = cal1.getTime(); cal2 = Calendar.getInstance(); cal2.set(_year, _month, _day, _hour, _minute, _second); date2 = cal2.getTime(); cal2.setTimeZone(tz2); date2 = cal2.getTime(); System.out.println("1 - date1 : " + date1 + " (Calendar.HOUR : " + cal1.get(Calendar.HOUR_OF_DAY) + " - " + cal1.getTimeInMillis() + ")"); System.out.println("2 - date2 : " + date2 + " (Calendar.HOUR : " + cal2.get(Calendar.HOUR_OF_DAY) + " - " + cal2.getTimeInMillis() + ")"); System.out.println("3 - comparaison : " + (date1.getTime() == date2.getTime()) + " --> attendu : true"); System.out.println("4 - TimeZone : " + cal1.getTimeZone().getDisplayName() + " et " + cal2.getTimeZone().getDisplayName());
La sortie console est la suivante :
Ici, le résultat est tout autre !1 - date1 : Tue May 09 11:10:53 CEST 2006 (Calendar.HOUR : 9 - 1147165853926)
2 - date2 : Tue May 09 11:10:53 CEST 2006 (Calendar.HOUR : 11 - 1147165853926)
3 - comparaison : true --> attendu : true
4 - TimeZone : GMT+00:00 et GMT+02:00
Dans les deux cas, j’ai bien 11H (ce que je souhaitais au départ), mais lors de la comparaison, il considère que les dates sont les mêmes. Alors, que dans la réalité, il est bien 11H dans les deux cas, mais en GMT+0 et en GMT+2.
Ma question est simple, comment faire pour avoir la date spécifié indépendamment du GMT (si je rentre 11H, je veux voir s’afficher 11H que ce soit en GMT+0 et GMT+2).
Et je souhaite pouvoir faire des comparaisons de dates (11H GMT+0 != 11H GMT+2)
Merci d’avance d’éclairer ma lanterne![]()
Partager