Newsgroup: it.comp.lang.visual-basic
Titolo: Differenza di orari

Qualcuno mi sa dare una dritta su come calcolare la differenza tra due orari
?
Per esempio tra le 15:32 e le 17:28 , quante ore e quanti minuti sono
passati ?
Tanto per tacitare gli eventuali "cercalo su google " vi riporto l'unica
cosa trovata :
:______________________
E' semplice aritmetica.
Per trasformare un numero da una base a un'altra si divide il numero per la
vecchia base e lo si moltiplica per la nuova.
Quindi 75 diviso la vecchia base centesimale (100) per la nuova base
sessantesimale (60)
75/100*60=45 minuti
89/100*60=53 minuti abbondanti (53 minuti e 24 secondi) e non 55
e viceversa.
:_____________________________________________________
Ho provato ad applicare questa formula, ma non mi tornano i conti ...
Aiuto ! ......:(
Akuma.
-
Risolvi l'addizione per rispondermi in privato
ehm ...   fa 59 ... e non dire "Ma io lo sapevo! cosi' mi hai rovinato
la sorpresa!"

 passati ?
Ragiona (!) e trasforma tutto in minuti, fai la differenza e ritrasforma il
risultato in ore e minuti. Checcevò?!
Occhio se la seconda ora rende un totale-minuti inferiore alla prima.
Significa che è del giorno dopo (ma ... pulce fastidiosa nell'orecchio...
quanti giorni dopo?)

 risultato in ore e minuti. Checcevò?!
'opart è nel formato(HH:MM) , come del resto Oarr
Public Function gestintervallo(Dpart As String, Darr As String, Opart As
String, Oarr As String) As Integer
orepartenza = Int(Left(Opart, 2))
orepartenza = orepartenza * 60
totale = orepartenza + Right(Opart, 2)
orearrivo = Int(Left(Oarr, 2))
orearrivo = orearrivo * 60
totale2 = orearrivo + Right(Oarr, 2)
end function
In questo modo i due totali sono fatti di minuti giusto ?


 totale2 = orearrivo + Val(Right(Oarr, 2))

'**********DICHIARAZIONE VARIABILI ********************
Dim orepresenza As Date
Dim I1, U1 As Date
Dim MNI, MNO As Integer
Dim HRI As String
Dim SCI, SCO As Integer
I1 = "13:20"
U1 = "18:43"
'**********START Calcolo differenza tra entrata e uscita
****************
SCI = DateDiff("s", I1, U1)
MNO = 0
HRI = 0
MNI = 0
SCO = 0
'ricava i minuti in SCO
While SCI >= 60
 SCO = SCO + 1
 SCI = SCI - 60
Wend
MNI = SCO
While MNI >= 60
 MNO = MNO + 1
 MNI = MNI - 60
Wend
HRI = MNO
SCI = Format(SCI, "00")
MNI = Format(MNI, "00")
HRI = Format(HRI, "00")
orepresenza = Format(CDate(HRI & ":" & MNI & ":" & SCI), "hh:mm")
'**********END Calcolo differenza tra entrata e uscita ****************
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 a darti una String e non un Variant):
Comunque (ho provato il tuo codice) va lo stesso. Qual è il problema?

[*Mirko Parisi*=
mir...@yahoo.com
] ha scritto:
...
Funzionerà pure, non ne dubito, ma un While/Wend (anzi, 2) per contare
quante volte 60 sta in un altro numero e ogni volta eseguire due operazioni
(quindi 4), beh, mi sembra un po' troppo...

Prima di leggere la funzione di mirco e capirla voglio capire cosa non
capisco io.
Questa č la funzione che ho fatto fino a mo, con la msgbox che dovrebbe
darmi [15:32] >>> 15:32
orepartenza = Int(Left(Opart, 2))
orepartenza = orepartenza * 60
totale = orepartenza + Val(Right(Opart, 2))
orearrivo = Int(Left(Oarr, 2))
orearrivo = orearrivo * 60
totale2 = orearrivo + Val(Right(Oarr, 2))
ore = totale \ 60
minuti = (totale Mod 60)
MsgBox " [ " & Opart & " ] >>> " & ore & ":" & minuti
Se la si esegue invece vedrete che la stringa in msgbox č [9:32] >>> 15:32
Mi spiegate perche'?

 passati ?
F1 + datediff

 15:32
Non è chiaro quale sia l'ora di partenza e quella di fine.
Comunque, mi pare che tu debba usare (totale2-totale) e non totale

> F1 + datediff
Eh gia... :)
Il problema non è date diff ... e che lo voglio afre con la MIA funzione.

Ok, risolto :)
Grazie a tutti :)


 Ok, risolto :)
Ti vergogni a dire che passavi 9:32 e non 09:32, vero?! ;-)

Akuma wrote:
e fammi postare anche la mia soluzione eh!
:-)
che usa anche datediff
un form con
2 textbox
2 commandbox
1 listbox
e questo codice
Option Explicit
Private Sub Command1_Click()
Dim minuti As Long
Dim ore As Long
Dim secondi As Long
Dim Tsec As Long
Dim resto As Long
Dim resto2 As Long
ore = 0
minuti = 0
secondi = 0
List1.AddItem ("Ore:" & DateDiff("h", Text1.Text, Text2.Text))
List1.AddItem "Minuti:" & DateDiff("n", Text1.Text, Text2.Text)
List1.AddItem "Secondi:" & DateDiff("s", Text1.Text, Text2.Text)
Tsec = CLng(DateDiff("s", Text1.Text, Text2.Text))
resto = Tsec Mod 3600
If resto > 0 Then
    ore = Val(Tsec / 3600)
    resto2 = resto Mod 60
    If resto2 > 0 Then
        minuti = Val(resto / 60)
        secondi = resto2
    Else
        minuti = Val(resto / 60)
        secondi = 0
    End If
Else
    ore = Val(Tsec / 3600)
    minuti = 0
    secondi = 0
End If
List1.AddItem "In altre parole: " & CStr(ore) & "." & CStr(minuti) & "." &
CStr(secondi)
End Sub
Private Sub Command2_Click()
List1.Clear
End Sub
Private Sub Form_Load()
Text1.Text = Time
End Sub
l'han postata
 tutti e fammela postare anche a me!
o..postata..o...proposta....o... prňstata..o... prostŕta???
boh!
:-)
-- 
Il Wodkino Nazionale č a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 Quotefix e altro:
http://www.martek.it/go.asp?portamia=4
Usr: ICLVB Pw: amici


auahuauhahu
come un ladro :)
Saluti :)

 passati ?
Documentati sulla funzione DateDiff del Visual Basic. Fa quello che vuoi tu.
Ovviamente i due orari devono essere contenuti in variabili di tipo date...
Ma a questo si risolve facilmente con un CDate()
Antonio Mirarchi

 passati ?
In effetti non è così difficile, se si conosce il trucco :P
Primo, tu dici di voler calcolare la differenza tra due orari, e questo è
facile:
Dim Orario1 As Date
Dim Orario2 As Date
Dim Differenza As Double
Differenza = Orario2 - Orario1
Ora hai un valore che esprime la differenza tra i due orari (anche di giorni
diversi) in frazioni di giorno (ti rimando a interminabili discussioni sul
formato delle date IEEE usate da VB fino al 6, 
VB.NET
 usa un sistema
leggermente differente).
adesso ti rimando a un vecchio post:
http://makeashorterlink.com/?O188519D5
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 totale = orepartenza + Val(Right(Opart, 2))
[snip]
Chi č che ti ha insegnato a mescolare cosě stringhe e numeri?
Vergogna! :)


 ?
E' notabile la differenza di stile tra vb6 e 
vb.net
:
vb6
\\
Dim d1 As Date
  d1 = "12/12/2002 22:20"
        Dim d2 As Date
        d2 = "13/12/2002 01:22"
        Dim t As Long
        t = DateDiff("n", d1, d2)
        Debug.Print t
\\
ben 7 righe
vb.net
\\
Dim d1 As System.DateTime = "12/12/2002 22:20"
        Dim d2 As System.DateTime = "13/12/2002 01:22"
        Dim t As Long = DateDiff(DateInterval.Minute, d1, d2)
        Debug.WriteLine(t)
\\
sole 4 righe !
quasi la metà
giuseppeD

 quasi la metà
Io direi invece "circa il venti per cento in più".
Bye, G.

 > \\
Possibile scrivere:
Dim d1 As DateTime = "12/12/2002 22:20"
Dim d2 As DateTime = "13/12/2002 01:22"
Dim t As Long = DateDiff(DateInterval.Minute, d1, d2)
Debug.WriteLine(t)
Quindi le battute diventano 166 - 14
a questo togliere 3 invio
e otteniamo 149 battute.
giuseppeD


 Vergogna! :)
Chino il capo e lo cospargo di cenere :))
Ho ancora TROPPE cose da imparare :))
Akuma

> > Io direi invece "circa il venti per cento in più".
Questo discorso tra di voi riguardo la sintassi di vb e .net mi dà da
pensare ...
come dice un mio amico quando è perplesso .... "boh, a me me fate paura
...."
:)
Akuma.


Stavamo solo ca##eggiando, non preoccuparti. Io almeno,
volevo tutt'al più indicare che non si può valutare un linguaggio
contando il numero di righe necessarie ad una certa sub,
ma so che Giuseppe lo sa bene quanto me, e... insomma,
stavamo solo scherzando. :-)
Avevo anche pensato di dire:
"Dim d1 As Date, d2 As Date, t as Long : d1 = "12/12/2002 22:20" : d2 =
"13/12/2002 01:22" : t = DateDiff("n", d1, d2) : Debug.Print t
 Guarda, una riga sola ! "
Poi ho ripiegato sul numero di battute. :-)
Bye, G.


[CUT]
non ho capito il suggerimento di google ma io farei cosě:
iOre1=15
iOre2=17
iMin1=32
iMin2=28
iDiffOre=iOre2-iOre1-1
iTotMin=(60-iMin1)+(iDiffOre*60)+iMin2
Sicuramente c'č qualcosa di piů facile ma....
Paolo


>
DateDiff
-- 
Ciao,
        Fabrizio
<=- 
http://www.negusweb.it
 -=>