Multiplication d'une durée [Résolu]

Messages postés
31
Date d'inscription
vendredi 6 février 2009
Dernière intervention
20 janvier 2010
- - Dernière réponse : PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 20 janv. 2010 à 22:59
Bonjour,
Alors j'ai eu beau chercher, je n'ai rien trouvé ...

j'ai une variable ou une textbox qui a pour valeur une durée (par exemple : 00:18:00 pour 18minutes :) )

J'aimerais multiplier cette valeur par un coefficient, par exemple 4.24264069 pour obtenir 1:16:22.

Comment je dois procéder dans mon code, car j'ai toujours un problème de type de données...

Merci d'avance !
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
3
Merci
salut,


une autre idée :


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim sTime As String = "00:18:00"

        Dim tsTime As TimeSpan = DateTime.Parse(sTime).TimeOfDay
        Dim dTime As Double = (tsTime.Seconds + (tsTime.Minutes * 60) + (tsTime.Hours * 3600)) * 4.24264069

        Dim tsRes As TimeSpan = DateTime.FromOADate(dTime).TimeOfDay

        MessageBox.Show(String.Format("{0}:{1}:{2}", tsRes.Hours, tsRes.Minutes, Convert.ToInt16(tsRes.Seconds)))
    End Sub


par contre j'obtiens 1:14:48 (avec l'arrondi des secondes)

++
[hr]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de PCPT
Messages postés
140
Date d'inscription
mardi 25 novembre 2003
Dernière intervention
1 novembre 2010
3
Merci
Bonjour,
je me permets de compléter le code de PCPT avec un code de jmfmarques :

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim sTime As String = "00:18:00"

        Dim tsTime As TimeSpan = DateTime.Parse(sTime).TimeOfDay
        Dim dTime As Double = (tsTime.Seconds + (tsTime.Minutes * 60) + (tsTime.Hours * 3600)) * 4.24264069

        Dim tsRes As TimeSpan = DateTime.FromOADate(dTime).TimeOfDay

        Dim nbsecondes As Integer
        Dim nbjours As Integer
        Dim nbheures As Integer
        Dim nbminutes As Integer

        nbsecondes = dTime
        nbjours = nbsecondes \ 86400
        nbheures = (nbsecondes Mod 86400) \ 3600
        nbminutes = (nbsecondes Mod 3600) \ 60
        nbsecondes = (nbsecondes Mod 3600) Mod 60
        MsgBox(nbjours & " jours " & nbheures & " heures " & nbminutes & _
        " minutes" & nbsecondes & " secondes ")

    End Sub

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_christoni
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
? cdate(cdate("00:18:00") * 4.24264069)
01:16:22



Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
31
Date d'inscription
vendredi 6 février 2009
Dernière intervention
20 janvier 2010
0
Merci
Merci pour ta réponse Renfield,

je viens de tester, mais il me sort l'erreur suivante :

Erreur 1 L'opérateur '*' n'est pas défini pour les types 'Date' et 'Long'.
Commenter la réponse de Neiflheim1
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
OK, pardon, j'avais pas vu que tu codes en .NET

en ce cas faudra le faire a la main :

repasser ta durée en nomber de secondes,
le multiplier par ton coefficient.

repasser du nombre de secondes obtenu en durée en Heure minutes

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
60
Date d'inscription
vendredi 14 novembre 2003
Dernière intervention
6 septembre 2012
0
Merci
peut-être
Dim dteDate As DateTime
dteDate = DateTime.FromOADate(CDate(TextBox1.Text).ToOADate * 4.24264069)
        
Commenter la réponse de fohaf
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
helas non, ca créé un décalage.

j'ai testé :

MessageBox.Show(Date.FromOADate((Date.Parse("00:18:00").ToOADate) * 4.24264069).ToString("hh:mm:ss"))

ca donne 11:32:25


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
repasser ta durée en nombre de secondes,
le multiplier par ton coefficient


ce qu'il est recommandé de vfaire également bsous VB6

Démonstration du pourquoi (sous VB6)

MsgBox CDate(CDate("06:18:00") * 4.24264069)


Que le résultat dépasse 23 h 59 et nous voilà mal barrés !
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
en décomposant :

        Dim dIn As Date
        Dim dOut As New Date
        dIn = Date.Parse("00:18:00")
        dOut = dOut.AddSeconds((dIn.Hour * 3600 + dIn.Minute * 60 + dIn.Second) * 4.24264069)

        MessageBox.Show(dOut.ToString("hh:mm:ss"))


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
sur qu'après, faudrait prendre en compte le nombre de jours, etc.


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
cela s'"arrêtera au nombre de jours.
Au delà, on passe à des notions calendaires qu'une durée ne saurait prendre en compte.

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu
Messages postés
31
Date d'inscription
vendredi 6 février 2009
Dernière intervention
20 janvier 2010
0
Merci
Merci pour toutes ces précisions :)

Cependant les secondes, minutes et heures me donnent par exemple 3 au lieu de 03...

Existe t-il une fonction pour déterminer le format "00" d'une variable?
Commenter la réponse de Neiflheim1
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
la fonction FORMAT oui

MessageBox.Show(String.Format("{0:00}:{1:00}:{2:00}", tsRes.Hours, tsRes.Minutes, Convert.ToInt16(tsRes.Seconds)))
Commenter la réponse de PCPT
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour, christoni

Pourquoi donc y mêler le code de mon ami jmfmarques (principalement fait pour VB6) alors que celui de PCPT va apparemment fort bien pour VB.Net ?


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu
Messages postés
140
Date d'inscription
mardi 25 novembre 2003
Dernière intervention
1 novembre 2010
0
Merci
Bonsoir ucfoutu,
Sauf que :
« par contre j'obtiens 1:14:48 (avec l'arrondi des secondes) »
dixit PCPT
En suivant la bonne idée de celui ci, j’ai de suite pensé à votre ami et balancé sa conversion qui donne le bon résultat : 1h 16 mn 22 sec.
Evidemment ceci demande à être optimisé, à défaut d’une proposition d’un code pur .net.
Pensez vous toujours que « VBA, VB6 et VB.Net sont 3 choses différentes, avec 3 syntaxes différentes. » ?
Commenter la réponse de cs_christoni
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Allons bon ! Je serais de toutes manières bien le tout dernier à remettre en cause ce qu'a écrit mon ami jmfmarques
Reste à transposer pour VB.Net, alors ...


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate
Commenter la réponse de ucfoutu
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
pas compris si la nouvelle signature était juste un clin d'oeil mais ceci devrait y répondre (aussi) :

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim tsTime As TimeSpan = DateTime.Parse("00:18:00").TimeOfDay
        Dim dTime As Double = (tsTime.Seconds + (tsTime.Minutes * 60) + (tsTime.Hours * 3600)) * 4.24264069
        MessageBox.Show(String.Format("{0:00}:{1:00}:{2:00}", Convert.ToInt32(dTime) \ 3600, Convert.ToInt32(dTime Mod 3600) \ 60, Convert.ToInt32(dTime Mod 3600) Mod 60))
    End Sub


INFO :
et en regardant en pas à pas, c'est tsRes qui altérait le résultat, et non l'arrondi final
Commenter la réponse de PCPT

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.