Petit problème de gestion de Date et de TimeZone
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).
Code:
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()); |
Sortie console :
Citation:
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
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.
J’ai remarqué qu’en indiquant le TimeZone après l’appel d’un getTime(), le résultat était différent
Code:
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 :
Citation:
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
Ici, le résultat est tout autre !
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 :)