Mon application a été déployée dans un vps Debian aux États-Unis, à Los Angeles. Donc, un code comme new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date())
retournera l'heure actuelle de l'Amérique/Los Angeles.
Puis-je effectuer certains réglages dans le fichier de configuration de Tomcat (server.xml
ou catalina.sh
ou quoi?) De sorte que l'heure actuelle renvoie un fuseau horaire spécifié, tel que GMT + 8 ou Asia/Taipei ???
Avec tous les endroits où vous pouvez définir des fuseaux horaires, il est toujours préférable de définir explicitement le fuseau horaire lorsque vous traitez avec des temps. Oui, votre serveur est à Los Angeles, mais où sont vos utilisateurs?
Comme traiter explicitement avec les fuseaux horaires rend votre application un peu plus complexe (mais aussi plus correcte, moins surprenante, plus difficile à tester), le mieux serait d’indiquer explicitement à Tomcat (Java) le fuseau horaire de votre horloge serveur. Attention: il existe plusieurs niveaux de configuration: réglez l'horloge de votre serveur sur UTC, configurez le système d'exploitation de votre serveur sur PST, puis indiquez à Java le fuseau horaire de votre serveur, par exemple. dans setenv.sh
do CATALINA_OPTS="$CATALINA_OPTS -Duser.timezone=America/Los_Angeles"
(ou quel que soit votre fuseau horaire) pour configurer Java pour votre fuseau horaire.
Testez, rincez, répétez jusqu'à ce que vous soyez satisfait de la configuration. Mais faites-en un choix explicite à tous les niveaux, sur lequel vous pourrez mettre la main à la pâte. La résolution du fuseau horaire est plutôt une fonctionnalité Java que Tomcat.
Il est très important pour la maintenabilité de votre logiciel de toujours de stocker les heures au format UTC. Si vous enregistrez dans votre fuseau horaire local, le calcul de tout autre fuseau horaire sera un véritable gâchis - pensez à l'heure avancée, changez de fuseau horaire dans différentes régions du monde, etc.
Donc: réglez votre serveur sur UTC, puis obtenez l'heure actuelle, vérifiez si elle est correcte. Pour l'affichage, vous pouvez utiliser le fuseau horaire local (par exemple, PST) (de l'utilisateur), mais pour le stockage et le calcul, le temps UTC est vivement recommandé.
Le fuseau horaire personnel de Tomcat serait spécifié dans son script de démarrage sous la forme suivante:
-Duser.timezone=GMT
Si vous voulez le modifier depuis Eclipse ... Exécuter -> Exécuter la configuration -> Apache Tomcat -> Serveur Tomcat -> VM arguments ajoutez -Duser.timezone = America/Montreal
Sous Linux, ajoutez simplement la ligne suivante dans setenv.sh
qui est à CATALINA_HOME/bin/
.CATALINA_OPTS="-Duser.timezone=Asia/{your zone}"
Pour Windows - Accédez à catalina.bat et ajoutez la propriété CATALINA_OPTS (sous Démarrer).
: doStart shift set CATALINA_OPTS = -Duser.timezone = America/Denver