Question

J'exécute une application Tomcat et je dois afficher des valeurs temporelles.Malheureusement, l'heure approche avec un décalage d'une heure.Je l'ai examiné et j'ai découvert que mon fuseau horaire par défaut est défini sur :

sun.util.calendar.ZoneInfo[id="GMT-08:00",
                           offset=-28800000,
                           dstSavings=0,
                           useDaylight=false,
                           transitions=0,
                           lastRule=null]

Plutôt que le fuseau horaire du Pacifique.Ceci est également indiqué lorsque j'essaie d'imprimer le fuseau horaire par défaut. Afficher un nom, et il apparaît "GMT-08:00", ce qui semble m'indiquer qu'il n'est pas correctement réglé sur le fuseau horaire américain du Pacifique.J'utilise Ubuntu Hardy Heron, mis à niveau depuis Gutsy Gibbon.

Existe-t-il un fichier de configuration que je peux mettre à jour pour indiquer au JRE d'utiliser Pacific avec toutes les informations associées à l'heure d'été ?L'heure sur ma machine s'affiche correctement, il ne semble donc pas s'agir d'une mauvaise configuration à l'échelle du système d'exploitation.


Ok, voici une mise à jour.Un collègue m'a suggéré de mettre à jour JAVA_OPTS dans mon /etc/profile pour inclure "-Duser.timezone=US/Pacific", ce qui a fonctionné (j'ai également vu CATALINA_OPTS, que j'ai également mis à jour).En fait, j'ai juste exporté les modifications dans les variables plutôt que d'utiliser le nouveau /etc/profile (un redémarrage plus tard récupérera les modifications et je serai en or).

Cependant, je pense toujours qu'il existe une meilleure solution...il devrait y avoir une configuration pour Java quelque part indiquant quel fuseau horaire il utilise ou comment il récupère le fuseau horaire.Si quelqu'un connaît un tel paramètre, ce serait génial, mais pour l'instant, c'est une solution de contournement décente.


J'utilise la version 1.5 et c'est très certainement un problème d'heure d'été.Comme vous pouvez le constater, le fuseau horaire est configuré pour ne pas utiliser l’heure d’été.Je pense qu'il est généralement réglé sur un décalage de -8 plutôt que sur le fuseau horaire spécifique du Pacifique.Étant donné que le décalage générique -8 n'a pas d'informations sur l'heure d'été, il ne l'utilise bien sûr pas, mais la question est : où puis-je dire à Java d'utiliser le fuseau horaire du Pacifique au démarrage ?Je ne cherche PAS une solution programmatique, ce devrait être une solution de configuration.

Était-ce utile?

La solution

C'est une "bizarre" dans la façon dont la JVM recherche le fichier zoneinfo.Voir ID de bogue 6456628.

La solution de contournement la plus simple consiste à faire de /etc/localtime un lien symbolique vers le fichier zoneinfo correct.Pour l’heure du Pacifique, les commandes suivantes devraient fonctionner :

# sudo cp /etc/localtime /etc/localtime.dist
# sudo ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

Je n'ai eu aucun problème avec l'approche du lien symbolique.

Modifier:Ajout de "sudo" aux commandes.

Autres conseils

Sur Ubuntu, il ne suffit pas de simplement modifier le fichier /etc/localtime.Il semble également lire le fichier /etc/timezone.Il vaut mieux suivre le instruction pour régler correctement le fuseau horaire.En particulier, procédez comme suit :

$ sudo cp /etc/timezone /etc/timezone.dist
$ echo "Australia/Adelaide" | sudo tee /etc/timezone
Australia/Adelaide
$ sudo dpkg-reconfigure --frontend noninteractive tzdata

Current default time zone: 'Australia/Adelaide'
Local time is now:      Sat May  8 21:19:24 CST 2010.
Universal Time is now:  Sat May  8 11:49:24 UTC 2010.

Sur mon Ubuntu, si /etc/localtime et /etc/timezone sont incohérents, Java semble lire le fuseau horaire par défaut à partir de /etc/timezone .

J'ai eu un problème similaire, peut-être le même.Cependant, mon serveur Tomcat fonctionne sur une machine Windows, donc la solution de lien symbolique ne fonctionnera pas.

j'ai mis -Duser.timezone=Australia/Sydney dans le JAVA_OPTS cependant, Tomcat ne reconnaîtrait pas que l'heure d'été était en vigueur.Pour contourner le problème, j'ai changé Australia/Sydney (GMT+10:00) à Pacific/Numea (GMT+11h00) afin que les heures s'affichent correctement, mais j'aimerais connaître la solution réelle ou le bug, le cas échéant.

Il peut être utile de vérifier les règles de fuseau horaire utilisées par votre système d'exploitation.

/usr/bin/zdump -v /etc/localtime | less

Ce fichier doit contenir vos règles d'heure d'été, comme celle-ci pour l'année 2080 :

/etc/localtime  Sun Mar 31 01:00:00 2080 UTC = Sun Mar 31 02:00:00 2080 BST isdst=1 gmtoff=3600

Vous pouvez comparer cela avec les règles de fuseau horaire que vous pensez devoir utiliser.On peut les trouver dans /usr/share/zoneinfo/.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top