Les Allergies
Alimentaires
Posez votre question Signaler

Java, heure locale [Résolu]

sebastien61 512Messages postés 6 juin 2006Date d'inscription 28 septembre 2010Dernière intervention - Dernière réponse le 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.
Lire la suite 

Java, heure locale »

Suggestions
6 réponses
Réponse
+1
moins plus
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);
      }
   }
sebastien61- 17 sept. 2009 à 21:41
Merci, je n'ai pas testé ton programme. En fait j'ai trouvé un morceau de code ici : http://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.
Ajouter un commentaire
Réponse
+0
moins plus
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
sebastien61- 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
Ajouter un commentaire
Réponse
+0
moins plus
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
sebastien61- 16 sept. 2009 à 22:36
J'obtiens une fenêtre dans laquelle il y a écrit : "langue/pays = fr/FR".
Merci pour ton aide
Ajouter un commentaire
Ce document intitulé « Java, heure locale » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?