Heure d'été, Classe Date, JDK 1.5 et TimeZone
Alors que l'on est passé à l'heure d'été ce week-end, soit UTC+0200 au lieu d'UTC+0100, je me suis aperçu ce matin que le JDK 1.5 de Sun ne me donnait pas (plus en fait !) l'heure correcte ... alors que la machine elle avait bien changé d'heure, comme le confirmait Gnome et la commande date.
En fait, la classe Date de Java était restée à l'ancienne heure, contrairement à moi qui ai vu mon week-end écourté, mais bref.
En effet, Java tient compte du TimeZone, et un simple
La raison de ce problème est que le JDK 1.5 ne me donnait pas le TimeZone me correspondant. Au lieu d' "Europe/Paris" j'obtenais GMT+0100 soit le TimeZone de la semaine dernière.
Pour remédier à ce problème, il suffit soit d'utiliser un JDK plus récent, c'est à dire un JDK 1.6, soit de modifier le TimeZone par programme comme suit:
On peut également modifier la propriété "user.timezone" et lui affecter la valeur "Europe/Paris", par exemple sur la ligne de commande Java, via un -D.
Je n'ai pas testé toutes les versions de JDK 1.5, mais les dernières versions du JDK 1.5 (jdk1.5.0_14 et jdk1.5.0_15) ont toutes deux ce bug sous Linux.
Autres posts liés à Développement / Logiciel / Java / Shell / C:
Erreurs de débutant en Java: fermer les fichiers !
Un très ancien bug non découvert jusque là
pop3/tcp server failing (looping), service terminated
De l’usage des programmes d’exemple
JavaMail en IMAP avec un serveur Exchange
En fait, la classe Date de Java était restée à l'ancienne heure, contrairement à moi qui ai vu mon week-end écourté, mais bref.
En effet, Java tient compte du TimeZone, et un simple
new Date();doit vous donner la date courante et tenir compte du TimeZone, et non vous donner la date GMT définie par nos amis Anglais.
La raison de ce problème est que le JDK 1.5 ne me donnait pas le TimeZone me correspondant. Au lieu d' "Europe/Paris" j'obtenais GMT+0100 soit le TimeZone de la semaine dernière.
TimeZone.getDefault().getID()=GMT+01:00
Pour remédier à ce problème, il suffit soit d'utiliser un JDK plus récent, c'est à dire un JDK 1.6, soit de modifier le TimeZone par programme comme suit:
TimeZone tz = TimeZone.getTimeZone("Europe/Paris");
TimeZone.setDefault(tz);
On peut également modifier la propriété "user.timezone" et lui affecter la valeur "Europe/Paris", par exemple sur la ligne de commande Java, via un -D.
Je n'ai pas testé toutes les versions de JDK 1.5, mais les dernières versions du JDK 1.5 (jdk1.5.0_14 et jdk1.5.0_15) ont toutes deux ce bug sous Linux.
Autres posts liés à Développement / Logiciel / Java / Shell / C:
Erreurs de débutant en Java: fermer les fichiers !
Un très ancien bug non découvert jusque là
pop3/tcp server failing (looping), service terminated
De l’usage des programmes d’exemple
JavaMail en IMAP avec un serveur Exchange
Libellés : classe Date, Date, Développement, GMT, Heure d'été, java, JDK, JDK 1.5, TimeZone, UTC
0 commentaires:
Enregistrer un commentaire
Abonnement Publier les commentaires [Atom]
<< Accueil