IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Problème transformation en heure GMT


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Points : 61
    Points
    61
    Par défaut Problème transformation en heure GMT
    Bonjour à tous,

    Voici mon problème je récupère une date qui a le type string "2013-08-21 9:32:00"

    Il faut que je transforme cette date en GMT à savoir "2013-08-21 7:32:00"

    Quel est la meilleur solution ?

    Convertir le string en date puis passer la date en GMT et ensuite convertir la date en string ?

    Une autre solution ?

    D'avance merci pour votre aide

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Guispeed4262 Voir le message
    Convertir le string en date puis passer la date en GMT et ensuite convertir la date en string ?
    Quelque chose comme ça. Ça évite de s'embrouiller quand la conversion tombe sur le jour précédent.

    Sauf que t'as pas besoin de "passer la date en GMT." TimeZone locale et GMT sont deux formats différents pour représenter la même Date. Cette date n'a pas besoin d'être modifiée, il faut juste la lire avec un format et l'écrire avec un autre format.

    Un truc genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String stringDate = "2013-08-21 9:32:00";
     
    DateFormat localFormat = new SimpleDateFormat("...");
    DateFormat gmtFormat = new SimpleDateFormat("...");
    TimeZone gmt = TimeZone.getTimeZone("GMT");
    gmtFormat.setTimeZone(gmt);
     
    Date date = localFormat.parse(stringDate);
    String convertedDate = gmtFormat.format(date);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    oui je pense que c'est la seule solution. Et utiliser Calendar pour changer l'heure.

    Voici un exemple que j'avais fait pour un autre post du forum, ou il s'agissait de parser une date avec timezone avec un formatage particulier, mais ou j'ai ajouté le traitement de la timezone. Dans ton cas, je suppose que tu as la timezone de la date d'origine à part.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SimpleDateFormat fa = new SimpleDateFormat("MM-dd-yyyy HH:mmZ");
    		MessageFormat mf = new MessageFormat("{0,date,yyyy-MM-dd HH:mm}{1}");
    		String date  = "2013-06-30 13:35+01:00";
     
    		java.util.Date f = null;
    		try {
    			Object[] values = mf.parse(date);
    			f = (Date) values[0];
    			String timezone=(String) values[1];
    			timezone="GMT"+timezone;
    			TimeZone tz = TimeZone.getTimeZone(timezone);
    			Calendar calendar = Calendar.getInstance();
    			calendar.setTime(f);
    			calendar.add(Calendar.HOUR, (int) TimeUnit.HOURS.convert(tz.getRawOffset(),TimeUnit.MILLISECONDS));
    			f=calendar.getTime();
    			System.out.println(fa.format(f));
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Points : 61
    Points
    61
    Par défaut
    Merci,

    mais le problème est que je n'ai pas la date sous ce format : "2013-06-30 13:35+01:00"

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Guispeed4262 Voir le message
    mais le problème est que je n'ai pas la date sous ce format : "2013-06-30 13:35+01:00"
    Ben, change le SimpleDateFormat.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Points : 61
    Points
    61
    Par défaut
    Bonjour j'ai mis en place le code par contre j'ai un problème, il m'ajoute une heure au lieu de la retirer, je ne vois pas comment modifier le code afin qu'il m'affiche la date en GMT.
    Voici le code modifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SimpleDateFormat fa = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
    MessageFormat mf = new MessageFormat("{0,date,yyyy-MM-dd HH:mm:ss}{1}");
    String date  = "2013-06-30 10:48:00";
    Log.i("v7","v7 Date Date "+new Date().toString());
    Log.i("v7","v7 Date TIMEZONE "+TimeZone.getDefault().getID());
    java.util.Date f = null;
    try {
    	Object[] values = mf.parse(date);
    	f = (Date) values[0];
     
     
            String timezone="-02:00";//(String) values[1];
    	timezone="GMT"+timezone;
    	TimeZone tiz =TimeZone.getTimeZone(TimeZone.getDefault().getID());
    	Calendar calendar = Calendar.getInstance();
    	calendar.setTime(f);
    	calendar.add(Calendar.HOUR, (int)TimeUnit.HOURS.convert(tiz.getRawOffset(),TimeUnit.MILLISECONDS));
    	f=calendar.getTime();
    	Log.i("v7","v7 Date TEST "+fa.format(f));
    } catch (ParseException e) {
    	e.printStackTrace();
    }

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    oui je pense que c'est la seule solution. Et utiliser Calendar pour changer l'heure.
    PAN! Tu n'as pas à changer la Date ou le Calendar. Le dateformat fait un travail correct lors de la conversion en String. Ton code est complexe, et j'ai l'impression qu'il va merder autour de minuit

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Guispeed4262 Voir le message
    Bonjour j'ai mis en place le code par contre j'ai un problème
    Tu m'étonne vu qu'il est pas bon au départ. Le code de thelvin est simple, t'as juste à combler les petits points....



    Je suis gentil, je le fais pour toi cette fois ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String stringDate = "2013-08-21 9:32:00";
     
    DateFormat localFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    DateFormat gmtFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    TimeZone gmt = TimeZone.getTimeZone("GMT");
    gmtFormat.setTimeZone(gmt);
     
    Date date = localFormat.parse(stringDate);
    String convertedDate = gmtFormat.format(date);

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Au temps pour moi, le code fournit était à coté de la plaque. La fatigue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     String timezone="-02:00";
    		timezone="GMT"+timezone;
    		TimeZone tztarget = TimeZone.getTimeZone(timezone);
    		SimpleDateFormat outformat = new SimpleDateFormat("MM-dd-yyyy HH:mm:ssZ");
    		outformat.setTimeZone(tztarget);
    		SimpleDateFormat informat  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		String date  = "2013-06-30 10:48:00";
    		try {
    			java.util.Date f = informat.parse(date);
    			System.out.println(outformat.format(f));
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Au temps pour moi, le code fournit était à coté de la plaque. La fatigue
    Faut aller te coucher alors Parce que là tu passe à GMT-2 alors qu'il a demandé à passer de heure locale à GMT (soit pour le moment reculer de 2 heure).

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Faut aller te coucher alors Parce que là tu passe à GMT-2 alors qu'il a demandé à passer de heure locale à GMT (soit pour le moment reculer de 2 heure).
    Oui peut être bien J'ai vu dans son post GMT-2:00 alors j'ai pensé au fuseau GMT-2:00 pas à -2H par rapport à courant.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Le code de thelvin est simple, t'as juste à combler les petits points....
    Oui, mais en réalité je ne l'ai écrit que bien après que joel.drigo ait posté sa propre réponse. Je ne fais jamais les devoirs des autres, mais je me suis dit que sans code c'était quand même vraiment trop vague. Et joel.drigo a posté pendant que j'éditais mon post.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Points : 61
    Points
    61
    Par défaut
    Merci Beaucoup le code de tchize_ fonctionne parfaitement.

    J'ai analysé le code, car j'ai besoin de comprendre comment ça fonctionne.

    j'ai donc décider de mettre en place l'inverse c'est à dire une date en GTM à transformer en GTM+2 (dans le cas de notre fuseau) Mais peut aussi varier en fonction des fuseau j'ai donc modifier le code de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SimpleDateFormat localFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat gmtFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    TimeZone gmt = TimeZone.getTimeZone(TimeZone.getDefault().getID());
    gmtFormat.setTimeZone(gmt);
     
    Date date2=null;
    try {
    	date2 = localFormat.parse(hour);
    } catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    Malheureusement ça ne fonctionne pas. Pourtant , on est d'accord les SimpleDateFormat servent juste à pouvoir convertir les dates. Le TimeZone permet de modifier le fuseau horaire. C'est donc bien lui qu'il faut modifier non ? La fonction TimeZone.getDefault().getID() permet de récupérer le fuseau horaire non ?

  14. #14
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Si tu n'indiques pas de TimeZone à un DateFormat, il va simplement utiliser le fuseau horaire par défaut, autrement dit la même chose que TimeZone.getDefault().getID(). Avec ton code modifié tu convertis donc une chose en exactement la même chose -_-°.

    Pour faire la conversion inverse, il faut construire localFormat et gmtFormat exactement de la même manière, mais les appeler dans l'ordre inverse, évidemment -_-°.

    Franchement, tu ne risques pas de comprendre ce que tu fais, si tu crées des variables gmt et gmtFormat et que tu y mets autre chose que le fuseau horaire GMT.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Points : 61
    Points
    61
    Par défaut
    Merci.
    j'ai compris

    voici le code Mofifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SimpleDateFormat FormatGMT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat FormatLocal = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     
    TimeZone timeLocal = TimeZone.getTimeZone(TimeZone.getDefault().getID());
    FormatLocal.setTimeZone(timeLocal);
    TimeZone gmt = TimeZone.getTimeZone("GMT");
    FormatGMT.setTimeZone(gmt);
     
    Date date2=null;
    try {
    	date2 = FormatGMT.parse(hour);
    } catch (ParseException e1) {
    	// TODO Auto-generated catch block
    	e1.printStackTrace();
    }
    return FormatLocal.format(date2);
    Il est également possible de supprimer les 2 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TimeZone timeLocal = TimeZone.getTimeZone(TimeZone.getDefault().getID());
    FormatLocal.setTimeZone(timeLocal);
    Car comme tu me l'as expliqué celle-ci ne sont pas nécessaire vu qu'il reprend le TimeZone par défaut.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transformer l'heure locale en GMT
    Par esisa1 dans le forum Général Java
    Réponses: 5
    Dernier message: 21/12/2010, 17h34
  2. Comment gérer l'heure GMT
    Par bobic dans le forum ASP
    Réponses: 10
    Dernier message: 24/04/2006, 17h12
  3. [SimpleDateFormat] Heure GMT
    Par Oliveuh dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 09/11/2005, 12h07
  4. heure GMT
    Par Zebulonn dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 02/09/2005, 10h59
  5. [MsSQL 2000]Conversion heure GMT
    Par prophetky dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/08/2005, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo