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

Neiflheim1 31 Messages postés vendredi 6 février 2009Date d'inscription 20 janvier 2010 Dernière intervention - 19 janv. 2010 à 13:46 - Dernière réponse : PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention
- 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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 19 janv. 2010 à 14:49
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]

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de PCPT
Meilleure réponse
cs_christoni 140 Messages postés mardi 25 novembre 2003Date d'inscription 1 novembre 2010 Dernière intervention - 20 janv. 2010 à 09:47
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

Merci cs_christoni 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_christoni
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 19 janv. 2010 à 14:02
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
Neiflheim1 31 Messages postés vendredi 6 février 2009Date d'inscription 20 janvier 2010 Dernière intervention - 19 janv. 2010 à 14:09
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
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 19 janv. 2010 à 14:20
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
fohaf 60 Messages postés vendredi 14 novembre 2003Date d'inscription 6 septembre 2012 Dernière intervention - 19 janv. 2010 à 14:30
0
Merci
peut-être
Dim dteDate As DateTime
dteDate = DateTime.FromOADate(CDate(TextBox1.Text).ToOADate * 4.24264069)
        
Commenter la réponse de fohaf
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 19 janv. 2010 à 14:38
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 janv. 2010 à 14:39
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
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 19 janv. 2010 à 14:43
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
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 19 janv. 2010 à 14:43
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 janv. 2010 à 14:47
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
Neiflheim1 31 Messages postés vendredi 6 février 2009Date d'inscription 20 janvier 2010 Dernière intervention - 20 janv. 2010 à 16:59
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 20 janv. 2010 à 17:08
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 janv. 2010 à 17:35
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
cs_christoni 140 Messages postés mardi 25 novembre 2003Date d'inscription 1 novembre 2010 Dernière intervention - 20 janv. 2010 à 21:50
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 janv. 2010 à 21:59
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 20 janv. 2010 à 22:59
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.