PDA

Visualizza la versione completa : [VB] Differenza orario


freezone
30-07-2002, 12:42
Da questo codice qualcuno mi saprebbe dire perchè se faccio una differenza tra un 29/07/2002 12.40.21 e un 30/07/2002 12.40.20, mi dà i sencondi negativi?

Dim datTimer1 As Date, datTimer2 As Date
Public Sub cdmTimer1_Click()
datTimer1 = Now
txtTimer1.Text = datTimer1
End Sub

Public Sub cmdTimer2_Click()
datTimer2 = Now
txtTimer2.Text = datTimer2
End Sub
Private Sub cmdDiff_Click()
datTimer1 = txtTimer1.Text
datTimer2 = txtTimer2.Text
Dim intDDiff As String

intDDiff = (DatePart("d", datTimer2) - DatePart("d", datTimer1)) * 24
If DatePart("n", datTimer2) - DatePart("n", datTimer1) < 0 Then
If DatePart("s", datTimer2) - DatePart("s", datTimer1) < 0 Then
intDDiff = intDDiff + DatePart("h", datTimer2) - DatePart("h", datTimer1) - 1
intDDiff = intDDiff & ":"
intDDiff = intDDiff & DatePart("n", datTimer2) - DatePart("n", datTimer1) + 59
intDDiff = intDDiff & ":"
intDDiff = intDDiff & DatePart("s", datTimer2) - DatePart("s", datTimer1) + 60
Else
intDDiff = intDDiff + DatePart("h", datTimer2) - DatePart("h", datTimer1) - 1
intDDiff = intDDiff & ":"
intDDiff = intDDiff & DatePart("n", datTimer2) - DatePart("n", datTimer1) + 60
intDDiff = intDDiff & ":"
intDDiff = intDDiff & DatePart("s", datTimer2) - DatePart("s", datTimer1)
End If
Else
If DatePart("s", datTimer2) - DatePart("s", datTimer1) < 0 Then
intDDiff = intDDiff + DatePart("h", datTimer2) - DatePart("h", datTimer1) - 1
intDDiff = intDDiff & ":"
intDDiff = DatePart("n", datTimer2) - DatePart("n", datTimer1)
intDDiff = intDDiff & ":"
intDDiff = intDDiff & (DatePart("s", datTimer2) + 60) - DatePart("s", datTimer1)
End If
intDDiff = (DatePart("d", datTimer2) - DatePart("d", datTimer1)) * 24
intDDiff = intDDiff + DatePart("h", datTimer2) - DatePart("h", datTimer1)
intDDiff = intDDiff & ":"
intDDiff = intDDiff & DatePart("n", datTimer2) - DatePart("n", datTimer1)
intDDiff = intDDiff & ":"
intDDiff = intDDiff & DatePart("s", datTimer2) - DatePart("s", datTimer1)
End If
lblDiff.Caption = intDDiff
End Sub

Grazie :ciauz:

Mabi
30-07-2002, 14:45
Perchè fai la differenza fra datTimer2 e datTimer1, cioè fra una data minore e una maggiore :) .

Puoi risolvere in due modi: nell'assegnazione dei valori o nell'effettuare la differenza.

Nel primo caso:


Public Sub cmdTimer1_Click()
datTimer2 = Now
txtTimer1.Text = CStr(datTimer2)
End Sub

Public Sub cmdTimer2_Click()
datTimer1 = Now
txtTimer2.Text = CStr(datTimer1)
End Sub

Nel secondo caso:


intDDiff = intDDiff + DatePart("h", datTimer1) - DatePart("h", datTimer2)
intDDiff = intDDiff & ":"
intDDiff = intDDiff & DatePart("n", datTimer1) - DatePart("n", datTimer2)
intDDiff = intDDiff & ":"
intDDiff = intDDiff & DatePart("s", datTimer1) - DatePart("s", datTimer2)


Ciao.

freezone
30-07-2002, 14:59
No, guarda se ti faccio vedere il codice a cui sono arrivato ti spaventi... è tutto il giorno che :dhò: su questo problemino.
Voglio calcolare il tempo trascorso tra due momenti nel tempo. In ore, minuti e secondi.
Del tipo che se il
primo campionamento è il 10/01/02 16:10:00
ed il secondo il 12/01/02 alle 15:09:00

Non voglio che mi sengo le ore in negativo (anche perchè mi darebbe errore). Esiste un sistema per calcolare il tempo con un numero assoluto o qualche idea del genere?

freezone
30-07-2002, 15:53
Tadaaaa

Function Intervallo(Prima, Poi)

Dim intDDiff As String, intH As Integer, intN As Integer, intS As Integer, intD As Integer
Dim intM As Integer, intY As Integer

intM = DatePart("m", Prima)
intD = DatePart("d", Poi) - DatePart("d", Prima)
intH = DatePart("h", Poi) - DatePart("h", Prima)
intN = DatePart("n", Poi) - DatePart("n", Prima)
intS = DatePart("s", Poi) - DatePart("s", Prima)
If intD < 0 Then
Select Case DatePart("m", Prima)
Case 1, 3, 5, 7, 8, 10, 12
intD = intD + 31
Case 4, 6, 9, 11
intD = intD + 30
Case 2
intD = intD + 28
End Select
End If
intH = intD * 24 + intH 'Aggiungo 24 ore se si supera il giorno di differenza

If intS < 0 Then
intS = intS + 60
intN = intN - 1
If intN < 0 Then
intN = intN + 60
intH = intH - 1
End If
Else
If intN < 0 Then
intN = intN + 60
intH = intH - 1
End If
End If
intDDiff = intH & ":" & intN & ":" & intS
Intervallo = intDDiff

End Function

interessa...:metallica :metallica :metallica
Questo era quello che volevo... se poi a qualcuno serve, tutto vostro ciao!!! :ciauz:

Loading