Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018
-
13 janv. 2017 à 12:56
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018
-
17 janv. 2017 à 12:41
Bonjour,
je sollicite votre aide pour régler le problème suivant :
je voudrais trouver la différence entre deux heures (le temps qu'il faut pour la deuxième heure pour atteindre la première heure), j'ai trouvé :
1er Code :
Dim t1 As Date = "22: 59 : 30" Dim t2 As Date = "23: 59 : 30" Dim temps As TimeSpan = t2.Subtract(t1) Dim H = temps.Hours Dim M = temps.Minutes Dim S = temps.Seconds Label3.Text = Format(H, "00") & ":" & Format(M, "00") & ":" & Format(S, "00")
2 eme Code :
Function CalculDifferenceHeure(ByVal HD As Object, ByVal HF As Object) As String 'HD Heure de début 'HF Heure de fin Dim Secondes As Long Dim Sec As String Dim Minutes As Long Dim Mn As String Dim Heures As Long Dim Hr As String Secondes = DateDiff("s", HD, HF) Heures = Secondes \ 3600 Minutes = Secondes \ 60 Mn = Minutes - (Heures * 60) Hr = Heures If Hr < 10 Then Hr = "0" & Heures End If If Mn < 10 Then Mn = "0" & Mn End If Sec = Secondes - (Minutes * 60) If Sec < 10 Then Sec = "0" & Sec End If CalculDifferenceHeure = String.Format(CultureInfo.InvariantCulture, "{0:00}", Hr) & " : " & String.Format(CultureInfo.InvariantCulture, "{0:00}", Mn) & " : " & String.Format(CultureInfo.InvariantCulture, "{0:00}", Sec) End Function
Les deux codes fonction très bien, mais ils ont un petit défaut par exemple :
Si la Première heure égale à : 22 : 59 : 30 La deuxième heure égale à : 23 : 59 : 30 Alors le résultat qui s'affiche est : 01 : 00 : 00 mais normalement on doit respecter l'ordre, on doit calculer le temps qu'il faut pour la deuxième heure pour atteindre la première heure, ce que je veux dire le résultat doit être : 23 : 00 : 00 (faire un tour complet)
Merci d'avance pour toute réponse
A voir également:
Différence entre 2 heures
Difference entre deux heure - Meilleures réponses
Calculer la différence entre deux heures - Meilleures réponses
vb95
Messages postés3417Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention20 mai 2023165 13 janv. 2017 à 13:25
bonjour Karin.code
Au niveau des heures sans précision du jour le calcul se fait au sein de la même journée
Dans ton cas si ta deuxième heure est supérieure à la première heure il faut que tu soustrait à 24 heures ton résultat d'origine pour avoir 23 heures
Bonjour Vb95,
merci de m'avoir répondu
j'ai fait beaucoup d'essais et je suis arrivé à la solution suivante :
Dim A() As String = Split(Label1.Text, " : ") 'Première heure Dim B() As String = Split(Label2.Text, " : ") 'Deuxième heure Dim temps As TimeSpan = t2.Subtract(t1) Dim H = temps.Hours Dim M = temps.Minutes Dim S = temps.Seconds If A(0) > B(0) Then If A(1) > B(1) Then If A(2) > B(2) Then Label3.Text = Format(H + 23, "00") & " : " & Format(M + 60, "00") & " : " & Format(S + 60, "00") ElseIf A(2) = B(2) Then Label3.Text = Format(H + 23, "00") & " : " & Format(M + 60, "00") & " : " & Format(S, "00") ElseIf A(2) < B(2) Then Label3.Text = Format(H + 23, "00") & " : " & Format(M + 59, "00") & ": " & Format(S + 60, "00") End If ElseIf A(1) <= B(1) Then If A(2) > B(2) Then Label3.Text = Format(H + 23, "00") & " : " & Format(M + 59, "00") & " : " & Format(S + 60, "00") ElseIf A(2) = B(2) Then Label3.Text = Format(H + 23, "00") & " : " & Format(M + 59, "00") & " : " & Format(S + 59, "00") ElseIf A(2) < B(2) Then Label3.Text = Format(H + 23, "00") & " : " & Format(M + 59, "00") & " : " & Format(S + 60, "00") End If End If ElseIf A(0) = B(0) Then If A(1) > B(1) Then If A(2) > B(2) Then Label3.Text = Format(H + 23, "00") & " : " & Format(M + 60, "00") & " : " & Format(S + 60, "00") ElseIf A(2) = B(2) Then Label3.Text = Format(H + 23, "00") & " : " & Format(M + 60, "00") & " : " & Format(S, "00") ElseIf A(2) < B(2) Then Label3.Text = Format(H + 23, "00") & " : " & Format(M + 59, "00") & ": " & Format(S + 60, "00") End If ElseIf A(1) = B(1) Then If A(2) > B(2) Then Label3.Text = Format(H + 23, "00") & " : " & Format(M + 59, "00") & " : " & Format(S + 60, "00") ElseIf A(2) = B(2) Then Label3.Text = Format(H + 23, "00") & " : " & Format(M + 59, "00") & " : " & Format(S + 59, "00") ElseIf A(2) < B(2) Then Label3.Text = Format(H, "00") & " : " & Format(M, "00") & " : " & Format(S, "00") End If ElseIf A(1) < B(1) Then Label3.Text = Format(H, "00") & " : " & Format(M, "00") & " : " & Format(S, "00") End If ElseIf A(0) < B(0) Then Label3.Text = Format(H, "00") & " : " & Format(M, "00") & " : " & Format(S, "00") End If
même si à mon avis elle n'est pas la meilleure solution
vb95
Messages postés3417Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention20 mai 2023165
>
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018 Modifié par vb95 le 13/01/2017 à 18:10
Sûr qu'il y a plus simple
Teste ceci avec un label nommé Label1
T1 et T2 sont les 2 heures que tu rentres au format String
C'est T2 qui doit atteindre T1
Tu récupères la différence dans Label1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim T1 As String = "20:30:00" Dim T2 As String = "21:30:00" Dim S1 As Integer = NbSecondes(T1) Dim S2 As Integer = NbSecondes(T2) Dim diff As Integer = S1 - S2 If diff < 0 Then diff = (24 * 3600) + diff Dim Heures As Integer = diff \ 3600 Dim Minutes As Integer = (diff - (3600 * Heures)) \ 60 Dim Secondes As Integer = diff - ((3600 * Heures) + (60 * Minutes)) Label1.Text = Heures.ToString.PadLeft(2, "0"c) & ":" & Minutes.ToString.PadLeft(2, "0"c) & ":" & Secondes.ToString.PadLeft(2, "0"c)
End Sub
Private Function NbSecondes(Heure As String) As Integer
Dim Data() As String = Heure.Split(":"c) Return (Convert.ToInt32(Data(0)) * 3600) + (Convert.ToInt32(Data(1)) * 60) + Convert.ToInt32(Data(2))
End Function
End Class
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182
>
vb95
Messages postés3417Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention20 mai 2023 13 janv. 2017 à 20:01
Bonjour Vb95
désolé de ne pas t'avoir répondu plus tôt
Il y a pas à dire ta méthode est bien meilleur que la mienne
Merci infiniment pour ton aide
Bonjour,
d'autres méthodes existent également, dont l'une par utilisation du modulo.
Il n'en reste pas moins vrai qu'aucune n'est à recommander, dans la mesure où le constat d'une heure de fin inférieure à celle d'arrivée ne permet pas de garantir qu'on est simplement passé d'un jour à son seul lendemain, pas plus d'ailleurs qu'une heure de fin supérieure à celle d'arrivée ne permettrait d'établir que l'arrivée et la fin sont dans la même journée.
La rigueur s'impose en matière de développement informatique de la même manière qu'elle s'impose ailleurs. Imaginez donc un procès-verbal qui n'apporterait pas ces précisions : le jugement qui s'en servirait comme base serait à coup certain remis en cause par la partie éventuellement condamnée.
Je n'ai rien d'autre à dire que cela.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
vb95
Messages postés3417Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention20 mai 2023165 13 janv. 2017 à 18:46
Bonsoir ucfoutu
tout ce que tu dis est fort exact !
Cependant Karin.code nous demandait ceci : je voudrais trouver la différence entre deux heures (le temps qu'il faut pour la deuxième heure pour atteindre la première heure) il n'était nullement question de passage d'un jour à l'autre dans sa demande
Merci pour tes explications
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219
>
vb95
Messages postés3417Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention20 mai 2023 13 janv. 2017 à 19:50
Bonjour vb95,
La relecture de son tout premier message continue toutefois dans ce cas à me troubler. Quelle pourrait bien être la finalité d'un tel calcul ?
J'aimerais à ce sujet les explications précises du demandeur et "sens" qu'elle n'est autre qu'un "tremplin" pour aboutir en fait au résultat d'un autre calcul.
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182 13 janv. 2017 à 20:01
Bonjour ucfoutu,
merci pour ta réponse
Concernant les modules je n'ai jamais utilisé ces derniers, car mes connaissances dans ce domaine sont minces.
vb95
Messages postés3417Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention20 mai 2023165
>
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018 13 janv. 2017 à 20:40
bonsoir Karine.code
Ucfoutu parlait de modulo et non de modules . Il faut comprendre le reste de division entière : 12 modulo 10 donne 2
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182
>
vb95
Messages postés3417Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention20 mai 2023 13 janv. 2017 à 21:14
Whismeril
Messages postés18386Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention22 mai 2023623 14 janv. 2017 à 03:09
Bonsoir,
parfois tu t'exprime de façon un peu obscure, peut être si on exprime
Si la Première heure égale à : 22 : 59 : 30
La deuxième heure égale à : 23 : 59 : 30
Alors le résultat qui s'affiche est : 01 : 00 : 00
mais normalement on doit respecter l'ordre, on doit calculer le temps qu'il faut pour la deuxième heure pour atteindre la première heure, ce que je veux dire le résultat doit être : 23 : 00 : 00 (faire un tour complet)
Merci d'avance pour toute réponse
Comme ça
Première partie
Lundi 23:59 - Lundi 22:59 ça fait 1h
Alors que
Mardi 22:59 - Lundi 23:59 ça fait 23H et c'est ce que tu cherches.
Là on voit tout de suite ce que tu veux et la réponse est dans la question.
Le type DateTime (Date c'est une réminiscence de VB6), est comme son nom l'indique l'association d'une date et d'une heure.
Quand tu fais
Dim t1 As Date = "22: 59 : 30"
Dim t2 As Date = "23: 59 : 30"
VB mets automatiquement une date (celle du PC au moment de l'exécution) et donc calcule "Lundi 23:59 - Lundi 22:59", si tu veux que le calcul inverse se fasse, il suffit de préciser la date.
Dim t1 As DateTime = DateTime.Parse("02/01/2017 22: 59 : 30")
Dim t2 As DateTime = DateTime.Parse("01/01/2017 23: 59 : 30")
Dim temps As TimeSpan = t1 - t2
Et là, y'a pas de modulo à gérer.
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182 17 janv. 2017 à 12:41
Bonjour Whismeril,
pour éviter toute complication on précise les dates, c'est une bonne idée
merci
Modifié par Karin.code le 13/01/2017 à 15:27
merci de m'avoir répondu
j'ai fait beaucoup d'essais et je suis arrivé à la solution suivante :
même si à mon avis elle n'est pas la meilleure solution
Modifié par vb95 le 13/01/2017 à 18:10
Teste ceci avec un label nommé Label1
T1 et T2 sont les 2 heures que tu rentres au format String
C'est T2 qui doit atteindre T1
Tu récupères la différence dans Label1
13 janv. 2017 à 20:01
désolé de ne pas t'avoir répondu plus tôt
Il y a pas à dire ta méthode est bien meilleur que la mienne
Merci infiniment pour ton aide