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

API standards et tierces Java Discussion :

[Time] comment calculer une différence entre deux Time?


Sujet :

API standards et tierces Java

  1. #1
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut [Time] comment calculer une différence entre deux Time?
    Bonjour,
    A partir d'une base de donnée je récupére les valeurs d'un champ de type Time.
    je souhaite développé une méthode en Java, qui me permet de calculer la différence entre deux instant de temps !
    j'ai mis un petit code et je veux le développé :
    voic un exemple :
    Time t1=new Time(10,10,10) //initiation
    t1.IndexOf("12:13:14");
    Time t2=new Time(10,10,10) //initiation
    t2.IndexOf("10:50:49");

    et lorsque j'affiche le t1 et t2 : il me renvoie les valeurs : 12:13:14 et 10:50:49, mais j'arrive pas à faire t1-t2, à la compilation j'ai une erreur d'impossible d'effectuer cette opération !

    qlq peux m'aider pour que je puisse développer ma méthode ?

    Merci d'avance
    (j'ai posté la question dans le forum Java.util mais y a pas une réponse) !

  2. #2
    Membre éclairé 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
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par adil_vpb
    à la compilation j'ai une erreur d'impossible d'effectuer cette opération !
    Sans ton code complet, et l'erreur précise : on en pourra pas grand chose (rien) pour toi !
    Pour info quand-même voici la sur la "Gestion des dates"...

  3. #3
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut
    je pense que je suis un peu claire :
    comment je peux faire une comparaison entre deux time?

    je veux faire par exemple t1-t2; et il me renvoie la durée entre ces deux instant.

  4. #4
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut
    encore une foie, je veux calculer la différence entre deux instant de temp passé en paramétres dans une méthode.

    (ex : t2-t1)
    comment je peux faire ca?

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    La classe Time est un simple wrapper de la classe java.util.Date.

    Pour faire des opérations sur des temps sortis d'une base de données il faut utilisze java.util.date

    Donc pour faire simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Date d1 = t1;  //Time hérite de Date
    Date d2 = t2;
     
    System.out.println("différence: "+(d2.getTime()-d1.getTime());

  6. #6
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut
    mais, est ce qu'il n'y aura pas de prbléme si j'ai mis :

    import java.sql.Time;
    String st="10:12:13";
    Time t1=new Time(01,01,01); // initiation de t1;
    t1.valueOf(st); // car c'est st que je la récupére à partir de la base de donnée.

    comment je peux intégrer ton code ?
    Date d1 = t1; //Time hérite de Date
    Date d2 = t2;

    System.out.println("différence: "+(d2.getTime()-d1.getTime());

    Merci pour votre comprhénsibilité !

  7. #7
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Bonjour,
    Tout d'abord évite d'utiliser les constructeurs de Time qui sont marqués "Deprecated", ensuite voici un bout de code qui fait ce que tu demandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Calendar t1=Calendar.getInstance();
    t1.set(2007,3,12,18,53,45);
    Calendar t2=Calendar.getInstance();
    t2.set(2007,3,12,23,53,45);
    long temps1=t1.getTimeInMillis();
    long temps2=t2.getTimeInMillis();
    long difference=temps2-temps1;
    Calendar resultat=Calendar.getInstance();
    resultat.setTimeInMillis(difference);
    System.out.println("heure : "+resultat.get(Calendar.HOUR)+"    minutes : "+resultat.get(Calendar.MINUTE)+" secondes : "+resultat.get(Calendar.SECOND));
    Tu l'auras compris : la classe Calendar est très pratique

    @+

  8. #8
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut
    est ce qu'il n'y pas autre solution sans passer par le calcule par getTimeInMillis? car je vois que t'as mis :
    Calendar t1=Calendar.getInstance();
    t1.set(2007,3,12,18,53,45);

    et moi j'ai mon datetime sous forma :"2007:03:12 18:53:45" !
    est ce que je dois faire un substring par exemple pour récupére chaque paramétre et l'inséré dans t1.set(year,mois,day,hh,mm,ss); ?

    s'il existe une possiblité pour simplifier la tâche ca sera mieux !

    Merci d'avance :

  9. #9
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    En jdbc une datetime se récupère avec un getDate et non un getTime.

    Un getDate te renvoie une java.sql.Date qui étend java.util.Date.

    Or les calendars ont une méthode setTime qui prends une java.util.Date en paramètre.

    Tu sais donc ce qu'il te reste à faire

  10. #10
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut
    oui mais moi je récupére le champ datetime de ma base de donnée par un getString, car si je le récupére par un getDate , il me renvoie une erreure (incompatible champ car la syntaxe du champ est yyyy-mm-dd hh:mm:ss)
    c'est pour cela que j'utilise un getString, donc l'etape suivante c'est d'extraire dans un premier temps le Time par une Substring par exemple, et d'effectuer aprés un calcule entre les instant du temps.

    la question est ce qu'il y a pas autre moyen plus simple et plus efficace, pour extraire le temps (hh:mm:ss) et d'effectuer aprés des calcules (différence entre deux instants) ?

    Merci d'avance, de puis hier j'arrieve pas à trouver une solution !!

  11. #11
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Dans ce cas là au lieu de parser à la main utilise la classes SimpleDateFormat qui avec le pattern approprié te sortira un Date java correcte

    Pattern à utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    yyyy-MM-dd hh:mm:ss
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    String dateString = rs.getString(...);
    Date d = null;
    try {
       d = sdf.parse(dateString);
    } catch(ParseException e) {
       System.out.println("format invalide contenu dans la base de données");
       e.printStackTrace();
    }

  12. #12
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Citation Envoyé par adil_vpb
    ...
    et moi j'ai mon datetime sous forma :"2007:03:12 18:53:45" !
    ...
    Bonjour,
    une autre solution que celle proposée par sinok serait un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String date="2007:03:12 18:53:45";
    String[] morceaux=date.split(" ");
    String[] donnees=morceaux[1].split(":");
    System.out.println(donnees[0]); //affiche l'heure
    System.out.println(donnees[1]); //affiche les minutes
    System.out.println(donnees[3]); //affiche les secondes
    Mais bon, tout cela reste du traitement de chaine de caractères...

  13. #13
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut
    bon,
    je vais faire le calcule dans la base de donnée, c à d, a partir d'une requete je vais calculer la résultat !
    est ce que c'est bien ou bien de traiter ces données dans une fonction?
    questionde performance ?

    Merci

Discussions similaires

  1. Calculer une différence entre deux dates
    Par attif0709 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/04/2010, 12h06
  2. [Time] Comment calculer la différence entre deux Time?
    Par adil_vpb dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 14/03/2007, 17h24
  3. Réponses: 2
    Dernier message: 13/03/2007, 16h57
  4. diffrence entre deux TIME
    Par mrkinfo dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 31/07/2006, 15h18
  5. [Dates] Calcul d'une différence entre deux heures
    Par loreleï85 dans le forum Langage
    Réponses: 12
    Dernier message: 28/06/2006, 11h43

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