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

Collection et Stream Java Discussion :

[Débutant] Problème de conversion en millisecondes


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 31
    Par défaut [Débutant] Problème de conversion en millisecondes
    Bonjour à tous, c'est la plus douée de toutes les programmeuses qui est de retour !

    J'ai un tout petit problème mais qui fait tout planter (en général, ça se passe toujours comme ça...).

    J'ai une heure de type Time dans ma base de données que je vais récupérer. Dans ma table, je l'ai appelée offset.

    J'y accède par la commande : tache.getOffset();

    Si je demande l'affichage de cette heure et que je regarde sur la console, pour 3h, il s'affiche :
    03:00:00

    Jusque là c'est normal. Mais quand je tente de convertir cette date en millisecondes, avec la commande : tache.getOffset().getTime();
    je peux lire sur la console le nombre
    7200000
    alors que 3h, en millisecondes, c'est 10800000....

    Je ne comprends pas cette différence. Sauriez vous m'aider à trouver ce qui cloche ? Merci beaucoup d'avance !

  2. #2
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    A priori, ça ressemble fort à un problème de décalage horaire de 1H : voir si tu as le même fuseau horaire (en +/- par rapport à GMT) entre ta base de données et ta JVM ?!...

  3. #3
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 31
    Par défaut
    D'accord, mais je ne comprends toujours pas pourquoi il m'affiche l'heure correcte quand elle n'est que récupérée en base...et qu'à partir du moment où je fais un traitement dessus (comme pour la conversion en millisecondes) j'obtiens ce décalage assez étrange !

  4. #4
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Précision : en Java une "Date" (ou un "Time") est toujours défini par le nombre de ms depuis le 1e janvier 1970 à minuit GMT, par contre son affichage sous forme de texte dépend du fuseau horaire de la JVM d'exécution.

  5. #5
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 31
    Par défaut
    Très bien, alors je vais faire ma lourde mais comment puis-je vérifier l'heure par défaut de ma JVM ?
    Ou bien comment ajouter une heure de plus, sans toucher à ce qui est en base ? Parce que j'ai beau faire +3600, j'obtiens une chaine concaténée du genre 72000003600...

  6. #6
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Citation Envoyé par pinggu
    Très bien, alors je vais faire ma lourde mais comment puis-je vérifier l'heure par défaut de ma JVM ?
    Ou bien comment ajouter une heure de plus, sans toucher à ce qui est en base ? Parce que j'ai beau faire +3600, j'obtiens une chaine concaténée du genre 72000003600...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TimeZone zone = TimeZone.getDefault();
    System.out.println(zone); // complet
    System.out.println(zone.getDisplayName()); // compréhensible
    System.out.println(zone.getRawOffset()); // declage horaire
    System.out.println(zone.getDSTSavings()); // à voir
    System.out.println(zone.getID()); // résumé
    LE TEMPS EN JAVA SE MESURE EN MILLISECONDES

  7. #7
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 31
    Par défaut
    Voici ce que j'obtiens :

    sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
    Heure d'Europe centrale
    3600000
    3600000
    Europe/Paris

    On dirait bien que le décalage d'une heure est activé !
    Comment puis-je donc prendre en compte ce décalage au niveau de mon code ?

  8. #8
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Time temp = tache.getOffset();
    long resultat = temp.getTime()+temp.getDSTSavings();
    System.out.println(resultat);

  9. #9
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Au lieu de récupérer un Time, essaye de récupérer un TimeStamp

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 85
    Par défaut
    Salut,

    En fait les objets Time et Calendar (entre autres) travaillent en millisecond
    écoulés depuis le 1er janvier 1970 (= 0 ms). Toi si tu veux travailler avec des
    temps écoulés, il faut que tu passes par des long pour stocker ses infos.
    Sinon, il faut que tu prennes un référenciel et que tu travailles toujours par
    rapport à celui ci. exemple le 1er janvier 1970 :-)

    Voila, pourquoi tu as 7200000 pour 3h, car il s'agit de 7200000ms écoulé
    depuis le 1/1/70, donc 3h du matin le 30 mai 2006 par exemple.
    Dernière chose, si tu veux ajouter des millisecond, fais leur avec un long
    et pas en concaténant une string :-)

    a+
    Xavier

  11. #11
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 31
    Par défaut
    ®om, merci mais je ne peux pas changer mon Time par un TimeStamp, car il est défini ainsi et si je change, le reste de l'appli que je n'ai pas codé par moi même va planter...car je travaille sur un projet déjà en place !

    g_rare, j'ai tenté ta ligne de code mais il me dit que getDSTSavings() n'est pas défini pour le type Time. Comment se fait-ce ?

  12. #12
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Citation Envoyé par pinggu
    g_rare, j'ai tenté ta ligne de code mais il me dit que getDSTSavings() n'est pas défini pour le type Time. Comment se fait-ce ?
    Autant pour moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TimeZone zone = TimeZone.getDefault();
    Time temps = tache.getOffset();
    long resultat = temps.getTime() + zone.getDSTSavings();
    System.out.println(resultat);

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/09/2007, 19h23
  2. [Débutant] Problème : echec de conversion
    Par oceanediana dans le forum Access
    Réponses: 24
    Dernier message: 05/07/2006, 11h33
  3. [D7][Débutant] Problème conversion String <- TEdit
    Par _alex_ dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/02/2006, 22h48
  4. [Débutant] Problème de conversion
    Par PCMan dans le forum Java ME
    Réponses: 4
    Dernier message: 25/10/2005, 20h34
  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