Java, heure locale

Résolu/Fermé
sebastien61 Messages postés 495 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 28 septembre 2010 - 15 sept. 2009 à 12:04
sebastien61 Messages postés 495 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 28 septembre 2010 - 17 sept. 2009 à 21:41
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 :
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.
A voir également:

3 réponses

Utilisateur anonyme
17 sept. 2009 à 21:36
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);
      }
   }
3
sebastien61 Messages postés 495 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 28 septembre 2010 59
17 sept. 2009 à 21:41
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.
0
Utilisateur anonyme
16 sept. 2009 à 00:59
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
0
sebastien61 Messages postés 495 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 28 septembre 2010 59
16 sept. 2009 à 15:22
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
0
Utilisateur anonyme
16 sept. 2009 à 21:59
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
0
sebastien61 Messages postés 495 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 28 septembre 2010 59
16 sept. 2009 à 22:36
J'obtiens une fenêtre dans laquelle il y a écrit : "langue/pays = fr/FR".
Merci pour ton aide
0