J'ai écrit une webapp en utilisant spring + hibernate. J'ai développé tout sur Windows et ensuite je l'ai déplacé vers un serveur virtuel Linux (Aruba, un fournisseur italien). J'ai remarqué une chose agaçante: quand les dates ont été sauvegardées sur les fenêtres, le temps serait le même que celui de mon "horloge murale", donc si je lis 13h45, j'aurai la même heure dans la ligne mysql. Cela ne se produit pas sous Linux de toute façon. En fait la machine linux est aussi sur CEST (mon fuseau horaire), je l'ai tapé "date" dans le shell. Mais je reçois les dates enregistrées dans la base de données avec un décalage par rapport à GMT. Encore une fois, mon application affiche toujours tout en GMT (y compris GMT comme fuseau horaire si je choisis de formater les dates pour afficher le fuseau horaire) et mysql enregistre tout dans ce format. Comment puis-je contrôler tout cela?Beahviours mysql étranges avec des fuseaux horaires? Comment les contrôler?
Répondre
Je poste la solution moi-même, parce que je pense que ça vaut la peine de l'avoir dans ce site.
Tout d'abord: mySql ne stocke aucune information de fuseau horaire. Donc, dites que vous utilisez GMT + 4 et que vous écrivez quelques enregistrements contenant des champs de date. Ensuite, vous déplacez votre système dans GMT-2 vous lisez ces enregistrements (peut-être en important les données de mysqldump). Si votre système et votre machine virtuelle ont le fuseau horaire GMT-2, les dates que vous lisez seront prises comme si elles avaient été écrites en GMT-2 et NON AJUSTÉES.
Solution: Prenez le contrôle de votre fuseau horaire VM en utilisant l'option de ligne de commande -Duser.timezone="GMT"
(vous pouvez même mettre dans votre script de démarrage Tomcat) ou votre fuseau horaire préféré (mais GMT est mieux, laissez-moi vous expliquer pourquoi). De cette façon, vous saurez pour le avec quel fuseau horaire votre machine virtuelle fonctionne. Ce ne signifie pas que Java VM supposera que votre temps système est celui que vous avez spécifié dans votre user.timezone, il connaîtra le fuseau horaire du système et ajustera les dates en conséquence. En fait, si vous n'êtes pas en GMT, vous verrez les dates ajustées à GMT et enregistrées dans la base de données en conséquence. De cette façon, vous serez sûr que vous l'utilisez comme référence.
Le problème est que si vous prenez un objet date et que vous faites myDateObject.toString()
, vous obtiendrez la date ajustée à GMT, avec le décalage horaire. Ce n'est pas ce que vous voudrez probablement.
La solution est d'utiliser SimpleDateFormat
et faire somthing comme ça quand vous avez à la sortie une date:
SimpleDateFormat dateFormat = new SimpleDateFormat(
"HH:mm dd/MM/yyyy z", Locale.ITALY);
dateFormat.setTimeZone(TimeZone.getTimeZone("Europe/Rome"));
Tout va se convertir dans le bon sens. Vous pouvez même aller plus loin si vous développez une application Web. Vous pouvez extraire le fuseau horaire de HttpRequest et ajuster la sortie de la date en conséquence, mais je ne suis pas allé jusqu'à écrire une application destinée uniquement aux utilisateurs italiens: D (yay).
Espérons que cela aidera.
- 1. Comparaison de fuseaux horaires MySQL
- 2. Rails timezones VS fuseaux horaires MySQL
- 3. MySql GMT Dates et fuseaux horaires
- 4. Fuseaux horaires en PHP, date, MySQL ...?
- 5. Comment gérer les fuseaux horaires dans CFML?
- 6. Horodatage et fuseaux horaires PHP/MySQL
- 7. Temps écoulé et fuseaux horaires
- 8. Traiter les fuseaux horaires en PHP
- 9. javascript formatage des dates avec les fuseaux horaires
- 10. Gestion des fuseaux horaires en PHP et MySQL?
- 11. Impossible de charger les fuseaux horaires?
- 12. Horodatages avec différents fuseaux horaires dans PostgreSQL
- 13. JavaScript Date() dysfonctionnement entre les fuseaux horaires?
- 14. asp.net maintenant() fonction avec différents fuseaux horaires
- 15. permettre de travailler avec différents fuseaux horaires
- 16. Validation de date selon les fuseaux horaires
- 17. Unix horodatage et fuseaux horaires
- 18. Gestion des fuseaux horaires dans Cocoa
- 19. Comment puis-je convertir des fuseaux horaires en Perl?
- 20. SQL - comparer les dates avec différents fuseaux horaires
- 21. Joda Time - différent entre les fuseaux horaires
- 22. Utilisation des fuseaux horaires dans SSRS
- 23. Conversion entre les fuseaux horaires en PHP
- 24. Fuseaux horaires des utilisateurs de support
- 25. Affichage des fuseaux horaires sans utiliser l'UTC
- 26. Objectif-c: Conversion entre les fuseaux horaires
- 27. Comment gérer les fuseaux horaires dans un CMS?
- 28. Gestion des fuseaux horaires pour différents utilisateurs
- 29. Affichage Javascript des différents fuseaux horaires
- 30. Fuseaux horaires, heure d'été, etc.