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
Calcul minutes entre deux heures - Meilleures réponses
Différence entre deux heures en ligne - Meilleures réponses
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
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))
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.
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
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.
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
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