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

Langage Java Discussion :

Problème de conversion de temps en fonction de timezone


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 193
    Par défaut Problème de conversion de temps en fonction de timezone
    Bonjour,
    J'ai une petite methode qui me permet de calculer les temps d'execution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	public static String convertFromMillisToTime(long timeInMSec, String pattern) {
    		Calendar c = Calendar.getInstance();
    		c.setTimeInMillis(timeInMSec);
    		c.add(Calendar.HOUR, -1);
    		return new SimpleDateFormat(pattern).format(c.getTime());
    	}	public static void main(java.lang.String[] args) {
    		System.out.println(convertFromMillisToTime(100000, "HH:MM:ss"));
    	}
    Comme vous pouvez le voir je suis obligé à Paris de retrancher 1 heure car j'obtient 01:01:40 au lieu de 00:01:40...A New York elle me renvoit 18:01:40...

    Bref , mon appli doit tourner dans 3 Timezone different et j'obtiens un mauvais temps :S
    Comment faire?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Une durée n'est pas une date ! Cela n'a même rien à voir...

    Lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	Calendar c = Calendar.getInstance();
    	c.setTimeInMillis(100000);
    Tu crée une date correspondant au 1er janvier 1970 00:01:40 à l'heure GMT.
    Mais cette date correspond à autre chose selon le fuseau horaire d'où ton problème...

    A la rigueur tu pourrais utiliser le TimeZone GMT pour récupérer l'heure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public static String convertFromMillisToTime(long timeInMSec, String pattern) {
    		Calendar c = Calendar.getInstance();
    		c.setTimeInMillis(timeInMSec);
    		DateFormat df = new SimpleDateFormat(pattern);
    		df.setTimeZone(TimeZone.getTimeZone("GMT"));
    		return df.format(c.getTime());
    	}
    Seulement ce n'est pas une solution très propre, déjà car elle t'empêche de dépasser les 24h, et ensuite car les Calendars gèrent également des règles qui font que certaines journées "durent plus longtemps" d'une seconde...
    Tout cela n'a rien à voir avec une durée...


    Il serait bien plus prudent de calculer cela toi même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	public static String convertFromMillisToTime(long timeInMSec, String pattern) {
    		long millisecondes = timeInMSec;
     
    		long secondes = millisecondes/1000L;
    		millisecondes -= secondes*1000L;
     
    		long minutes = secondes/60L;
    		secondes -= minutes*60L;
     
    		long heures = minutes/60L;
    		minutes -= heures*60L;
     
    		return String.format("%02d:%02d:%02d", heures, minutes, secondes);
    	}
    Ou encore mieux : tu peux utiliser la méthode DurationFormatUtils.formatDuration() des Jakarta Commons Lang...


    a++

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 193
    Par défaut
    Merci Adiguba , je me demande pourquoi j'ai forcé sur l'objet Date , Calendar et Time :S...j'aurai du me cantoner à la simplicité
    (les bons vieux reflexes de C )

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/08/2010, 12h49
  2. problème de conversion (fonction DrawLine)
    Par maicheul dans le forum C++/CLI
    Réponses: 5
    Dernier message: 08/07/2009, 21h52
  3. Réponses: 2
    Dernier message: 06/01/2009, 19h39
  4. Réponses: 6
    Dernier message: 24/05/2007, 17h18
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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