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

Java Discussion :

[Math][Temps d'execution]Exprimée en secondes?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut [Math][Temps d'execution]Exprimée en secondes?
    Bonjour,

    je m'ennuie en ce moment.

    Comment feriez-vous pour qu'un temps de chargement (qui est variable) soit affiché en secondes, en minutes et secondes si la minute est dépasée, etc...

    Bref, l'équivalent du temps affiché en fin de téléchargement d'un fichier sur le web dans la fenetre de dialogue finale.

    A partir d'un System.currentTimeMillis() ?

  2. #2
    Membre Expert
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Par défaut
    Je diviserais ce que j'obtiens du System.currentTimeMillis() et j'utiliserais l'opérateur %...

  3. #3
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Citation Envoyé par viena
    Je diviserais ce que j'obtiens du System.currentTimeMillis() et j'utiliserais l'opérateur %...
    Sachant que:

    1000 millisecondes font 1 seconde
    60 secondes font 1 minute
    60 minutes font 1 heure
    24 heure font 1 jour


  4. #4
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par jowo
    Citation Envoyé par viena
    Je diviserais ce que j'obtiens du System.currentTimeMillis() et j'utiliserais l'opérateur %...
    Sachant que:

    1000 millisecondes font 1 seconde
    60 secondes font 1 minute
    60 minutes font 1 heure
    24 heure font 1 jour

    1) Donc il vaut mieux utiliser le currentMillis que Calendar par exemple d'après vous, comme quoi je ne suis pas si c...

    2)
    Citation Envoyé par viena
    Je diviserais ce que j'obtiens du System.currentTimeMillis() et j'utiliserais l'opérateur %...
    Comment utiliser l'operateur modulo suivant mon problème pour déterminer si la minute à été dépasser ?
    if(resultat>60 000) ?

  5. #5
    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,

    Citation Envoyé par Regis.C
    1) Donc il vaut mieux utiliser le currentMillis que Calendar par exemple d'après vous, comme quoi je ne suis pas si c...
    Oui Calendar est fait pour gérer des dates. OR dans ton cas il ne s'agit pas de date mais de durée d'exécution (si j'ai bien compris).

    Citation Envoyé par Regis.C
    Comment utiliser l'operateur modulo suivant mon problème pour déterminer si la minute à été dépasser ?
    if(resultat>60 000) ?
    Le plus simple est de te faire une classe qui calculera tout d'un coups...
    Tu commences par calculer le nombre de jours et tu supprimes le nombre de secondes que cela fait pour pouvoir calculer les heures, etc...

    Exemple :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    public class Duration {
            private long seconds;
            private long minutes;
            private long hours;
            private long days;
     
     
            public Duration (long timeInMillis) {
                // On supprime les millisecondes
                long lTime = timeInMillis / 1000;
     
                // On récupere le nombre de jours 
                this.days = lTime / (24*60*60);
                // que l'on supprime de notre calcul
                lTime -= this.days * (24*60*60);
     
                // On récupere le nombre d'heures 
                this.hours = lTime / (60*60);
                // que l'on supprime de notre calcul
                lTime -= this.hours * (60*60);
     
                // On récupere le nombre de minutes
                this.minutes = lTime / (60);
                // que l'on supprime de notre calcul
                lTime -= this.minutes * (60);
     
                // et il ne reste que les secondes
                this.seconds = lTime;            
            }
    }
    a++

  6. #6
    Inactif
    Inscrit en
    Octobre 2005
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2005
    Messages : 150
    Par défaut
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    while(go){
    			now=System.currentTimeMillis();
    			diff=now-millisecondes;
    			if (diff>1000){
    				millisecondes=now;
    				secondes++;
    				if(secondes==60){
    					secondes=0;
    					minutes++;
    					if(minutes==60){
    						minutes=0;
    						heures++;
    						if(heures==24){
    							heures=0;
    							go=false;
    						}
    					}
    				}
    				String text="";
    				if (heures<10){
    					text+="0";
    				}
    				text+=new Long(heures).toString()+":";
    				if (minutes<10){
    					text+="0";
    				}
    				text+=new Long(minutes).toString()+":";
    				if (secondes<10){
    					text+="0";
    				}
    				text+=new Long(secondes).toString();
    				ecran.setText(text);
    			}
    		}
    Cela affiche un résultat du type hh:mm:ss

  7. #7
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    On va tacher de se calmer...
    en executant ces 5 lignes de code dans mon main, j'obtient 1 fois sur 2 "5", et 1 fois sur 2 "4" !!!

    : : :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		long one = System.currentTimeMillis();
    		Thread.sleep(5000);
    		long two = System.currentTimeMillis();
    		long re = two-one;
    		System.out.println(re/1000);

  8. #8
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    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
    	public static void main(String[] args) throws InterruptedException 
    	{
    		int ent = 0;
    		while(ent<5)
    		{
    			ent++;
    			long one = System.currentTimeMillis();
    			Thread.sleep(5000);
    			long two = System.currentTimeMillis();
    			long re = two-one;
    			System.out.println(re/1000);
    			Duration dur = new Duration(re);
    		}
     
     
    	}
    resultat en console:

  9. #9
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Tout est clair

    La division de deux entiers ne donne pas forcément un entier. Il faudrait que je redarde la documention sur Java sur la division avec des variables de type long. Il se peut que le résultat soit in float d'oû perte probable de la précision ;-)

  10. #10
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Nota Bene: Ne pas confondre ordinateur et chronomètre

  11. #11
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par jowo
    Nota Bene: Ne pas confondre ordinateur et chronomètre

    exact...
    avec un Thread.sleep(2000);
    j'obtient 1970 ou 2040 qui divisé par 1000 me donne 1 ou 2

  12. #12
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    ...et si je veux obtenir 1,970 au lieu de 1970 ?

    Il me fait des arrondis à la hache avec un float ou un double...

    Comment préciser le nombre de chiffre après la virgule ?

  13. #13
    Inactif
    Inscrit en
    Octobre 2005
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2005
    Messages : 150
    Par défaut
    Pour deux chiffres après la virgule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static float getArrondi(double nombre){//renvoie l'arrondi d'un double
    	//à deux chiffres après la virgule
    		return (Math.round(nombre*100f)/100f);
    	}
    Pour 3 chiffres remplacer 100 par 1000, etc.

  14. #14
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    String stringTime(long ms)
    {
    String tmpStr ="";
     
    String += ms>1000? ((ms/1000)%60).toString + "s " : "";
    String += ms>60000? ( (ms/60000) % 60).toString +"mn " : "";
    String += ms>36000000? ( (ms/36000000) % 24).toString + "h "  : "";
    String += ms>24*36000000? ( (ms/(24*36000000)) % 365).toString + "j "  : "";
     
    //Je m'arrette la, on peu faire année, siecle ect ect...
     
    return tmpStr
    }

  15. #15
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Par défaut
    Citation Envoyé par Regis.C
    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
    	public static void main(String[] args) throws InterruptedException 
    	{
    		int ent = 0;
    		while(ent<5)
    		{
    			ent++;
    			long one = System.currentTimeMillis();
    			Thread.sleep(5000);
    			long two = System.currentTimeMillis();
    			long re = two-one;
    			System.out.println(re/1000);
    			Duration dur = new Duration(re);
    		}
     
     
    	}
    resultat en console:
    Reessaye avec System.out.println(re/1000f); et la tu devrais avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    5.0000
    5.0001
    4.9998
    5.0000
    5.0000
    Ou dans le genre: C'est parceque tu fait une division d'entier et qu'il fait une troncature automatique! (1/2) = 0 alors que (1f/2f) = 0.5

  16. #16
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Attention aux années, siècles et ères. Il faut penser qu'une année ne dure pas à 365 jours mais qu'elle équivaut à 365jours 5heures et environ 45minutes.

  17. #17
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Bon ben je ne sais pas si c'est très propre, mais voila ce que je voulais:

    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
    23
    24
    25
    26
    27
    28
    public class PastTime 
    {
        private long milliseconds;
        private long seconds; 
        private long minutes; 
        private long hours; 
        private long days; 
     
     
    	   public PastTime (long timeInMillis) 
    	   { 
    		   long lTime =  timeInMillis/1000;
     
    		   // On récupere le nombre de jours 
    		   days = lTime / (24*60*60); 
    		   // On récupere le nombre d'heures 
    		   hours = lTime / (60*60); 
    		   // On récupere le nombre de minutes 
    		   minutes = lTime / (60); 
    		   // On récupere les secondes 
    		   seconds = ((timeInMillis)/1000)-(minutes*60);
    		   //Et enfin les millisecondes      
    		   milliseconds = (long) (((Math.round(timeInMillis)/1000f)-((timeInMillis)/1000))*1000);  
     
    		   System.out.println(days+" jours "+hours+" heures "+minutes+" min "+seconds+" secondes "+milliseconds+" ms");
    	   } 
     
    }

Discussions similaires

  1. limit et temps d'execution avec oracle et PHP
    Par dor_boucle dans le forum Oracle
    Réponses: 20
    Dernier message: 10/12/2005, 14h31
  2. Temps d'execution d'un select sur une vue
    Par rosewood dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/02/2005, 16h06
  3. Temps d'execution d'une requête
    Par Maglight dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/01/2005, 08h38
  4. [VB.NET] Temps d'éxécution d'une page...
    Par Webman dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/06/2004, 12h20
  5. Connaitre le temps d'execution d'un pgm ?
    Par yacinechaouche dans le forum C
    Réponses: 7
    Dernier message: 27/01/2003, 20h57

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