Java, heure locale
Résolu
sebastien61
Messages postés
495
Date d'inscription
Statut
Membre
Dernière intervention
-
sebastien61 Messages postés 495 Date d'inscription Statut Membre Dernière intervention -
sebastien61 Messages postés 495 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je souhaite écrire la date "30/03/2008 02:00:00" (que je récupère sous forme de String) dans une base de données. Cette date se trouve avant un passage heure d'hiver vers heure d'été (changement à 3h du matin)
Quand je fait :
J'ai en sortie dans maDate : 30/03/2008 03:00:00 !
Remarques : si je fais le même traitement avec une heure d'été, je n'ai pas de problème. J'ai essayé en ajouter "GMT+1:00", "GMT", "GMT-1:00" dans le String, mais ça n'a pas résolu mon problème...
Je comprends que c'est un problème de changement d'heure, mais j'aimerais que java prenne la date/l'heure comme étant locale, sans la modifier !
Merci d'avance pour votre aide.
Je souhaite écrire la date "30/03/2008 02:00:00" (que je récupère sous forme de String) dans une base de données. Cette date se trouve avant un passage heure d'hiver vers heure d'été (changement à 3h du matin)
Quand je fait :
String strDate = "30/03/2008 02:00:00";
SimpleDateFormatter sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date maDate = sdf.parse(strDate);
J'ai en sortie dans maDate : 30/03/2008 03:00:00 !
Remarques : si je fais le même traitement avec une heure d'été, je n'ai pas de problème. J'ai essayé en ajouter "GMT+1:00", "GMT", "GMT-1:00" dans le String, mais ça n'a pas résolu mon problème...
Je comprends que c'est un problème de changement d'heure, mais j'aimerais que java prenne la date/l'heure comme étant locale, sans la modifier !
Merci d'avance pour votre aide.
3 réponses
-
Salut,
Finalement j'ai trouvé ceci:
import java.text.*; import java.util.*; public class TestDateTimeZone { public static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); public static void main(String[] args) throws Exception { String laDateBdd = "30/03/2008 02:00:00"; System.out.println("\nLa date Bdd :\n" + "\"" + laDateBdd + "\"\n"); String laDate = laDateBdd.substring(6,10) + "/" + laDateBdd.substring(3,5) + "/" + laDateBdd.substring(0,2) + " " + laDateBdd.substring(11); System.out.println("La date qui sera utilisee :\n" + laDate + "\n"); // Pour éviter les fuseaux horaires // Sinon le parsing est impossible TOUTE LA JOURNEE D'UN CHANGEMENT D'HEURE TimeZone utc = TimeZone.getTimeZone("UTC"); TimeZone.setDefault(utc); DATE_FORMATTER.setTimeZone(utc); // parsing de la date SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date parsedDate = sdf.parse(laDate); // formattage selon définition du projet String formattedDateString = DATE_FORMATTER.format(parsedDate); System.out.println("Avec la date BDD: " + laDateBdd); System.out.println("Nous utilisons : " + laDate); System.out.println("Et nous obtenons: " + formattedDateString); } }-
Merci, je n'ai pas testé ton programme. En fait j'ai trouvé un morceau de code ici : https://www.roseindia.net/java/java-conversion/DateToGMT.shtml
Ensuite j'ai rajouté l'argument en lancement de l'appli : -Duser.timezone=GMT pour indiquer à la JVM qu'on est au méridien de greenwich.
C'est pas très joli mais ça fonctionne (parce qu'il n'y a pas de changement d'heure au méridien greenwich !
Merci quand même pour ton aide.
-
-
Salut,
Une solution:
String laDateBdd = "30/03/2008 02:00:00"; System.out.println("\nLa date Bdd :\n" + "\"" + laDateBdd + "\"\n"); String laDate = laDateBdd.substring(6,10) + "/" + laDateBdd.substring(3,5) + "/" + laDateBdd.substring(0,2) + " " + laDateBdd.substring(11); System.out.println("La date qui sera utilisee :\n" + laDate + "\n"); try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date d = sdf.parse(laDate); System.out.println("La date obtenue:\n" + d.toString() + "\n"); sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); String maDate = sdf.format(d); System.out.println("La date que l'on veut:\n" + maDate + "\n"); } catch(Exception e) { System.err.println("Exception :"); e.printStackTrace(); }
Cordialement,
Dan-
Salut danimo, merci pour ta réponse.
J'ai essayé avec "30/03/2008 02:20:00", voici l'affichage :La date Bdd : "30/03/2008 02:20:00" La date qui sera utilisee : 2008/03/30 02:20:00 La date obtenue: Sun Mar 30 03:20:00 CEST 2008 La date que l'on veut: 30/03/2008 03:20:00
Ce n'est pas un problème avec SimpleDateFormat, mais un problème de timezone (dû au décalage horaire).
Merci pour ton aide malgré tout !
D'autres suggestions ?
Merci d'avance
-
-
Salut,
Peux-tu me dire ce que tu obtiens avec ceci (qui ne changera pas le résultat, mais j'ai besoin de ce qui s'affiche dans la boîte de dialogue)
String info = "langue/pays = " + System.getProperty("user.language") + "/" + System.getProperty("user.country") + "\n"; javax.swing.JOptionPane.showMessageDialog(null,info);
merci