Italian Domanda spinosa su gestione ore

Xfood

Expert
Licensed User
Buongiorno, supponiamo di avere un campo
Ora, di tipo numerico 4,2,
Ed inserisco i valori per esempio
Giorno ore
Giorno 1 ore di lavoro 10.50
Giorno 2 ore Di lavoro 10.50

Come faccio a fare una somma che mi restituisce 21.40?

Oppure esiste un metodo migliore per salvare le ore giornaliere e poi sommarle correttamente?

Grazie Per la cortese attenzione.
 

picenainformatica

Active Member
Licensed User
Longtime User
B4X:
    Dim t As Int=(10*60 +50 +10*60+50)
    Dim H As Int=t/60
    Dim m As Int=t Mod 60
 

Xfood

Expert
Licensed User
B4X:
    Dim t As Int=(10*60 +50 +10*60+50)
    Dim H As Int=t/60
    Dim m As Int=t Mod 60
Grazie per la celere risposta,
Quindi se avessi una lista di 31 giorni, dovrei sommare tutti e 31 giorni in questo metodo suppongo..
B4X:
Dim t As Int=(10*60 +50 +10*60+50 +5*60+15 +3*60+45  ecc...)
 

MarcoRome

Expert
Licensed User
Longtime User
Puoi anche usare:

B4X:
    ......
    Dim MyList As List = Array ("02:30", "05:30", "12:45", "03:25", "04:45")
    Dim ms As Long
    For Each tim As String In MyList
        Dim hm() As String =Regex.Split(":", tim)
        ms = ms + hm(0) * DateTime.TicksPerHour + hm(1) * DateTime.TicksPerMinute
    Next
    Log(ConvertMillisecondsToString(ms))
    .......
    

Sub ConvertMillisecondsToString(t As Long) As String
    Dim hours, minutes, seconds As Int
    hours = t / DateTime.TicksPerHour
    minutes = (t Mod DateTime.TicksPerHour) / DateTime.TicksPerMinute
    seconds = (t Mod DateTime.TicksPerMinute) / DateTime.TicksPerSecond
    Return $"$1.0{hours}:$2.0{minutes}:$2.0{seconds}"$
End Sub

 

Xfood

Expert
Licensed User
Puoi anche usare:

B4X:
    ......
    Dim MyList As List = Array ("02:30", "05:30", "12:45", "03:25", "04:45")
    Dim ms As Long
    For Each tim As String In MyList
        Dim hm() As String =Regex.Split(":", tim)
        ms = ms + hm(0) * DateTime.TicksPerHour + hm(1) * DateTime.TicksPerMinute
    Next
    Log(ConvertMillisecondsToString(ms))
    .......
    

Sub ConvertMillisecondsToString(t As Long) As String
    Dim hours, minutes, seconds As Int
    hours = t / DateTime.TicksPerHour
    minutes = (t Mod DateTime.TicksPerHour) / DateTime.TicksPerMinute
    seconds = (t Mod DateTime.TicksPerMinute) / DateTime.TicksPerSecond
    Return $"$1.0{hours}:$2.0{minutes}:$2.0{seconds}"$
End Sub
Ottimo...
Approfitto della vostra bontà di oggi,
Un ultimo sforzo

Supponiamo che con questa funzione sommo due valori, 1:15, 1:25
Mi ritorna correttamente 2 ore 30 minuti,
Supponiamo che il mio stipendio orario e di 5 euro l'ora, come faccio a calcolare il totale dovuto?
Dovrei avere totale dovuto = 12.50
Una funzioncina che passo le ore, i minuti di lavoro , piu il costo orario, e mi ritorana il totale dovuto?

Totaledovuto=CalcolaStipendio(ore,minuti,costo_orario)
Help..
 

Xfood

Expert
Licensed User
ok questa volta mi rispondo da solo, magari ce un modo piu elegante di farlo, ma sembra che funaziobna e per me va bene cosi,
(formattazione numeri a parte)
allego funzioncina


B4X:
Log(CalcolaStipendio(2,30,5.00))  ' ritorna 12.5

Sub CalcolaStipendio(ore As Float,minuti As Float,costo_orario As Float) As Float
 Dim costo_x_Minuto As Float=costo_orario/60
 Dim Importo_Ore_Dovuto As Float = ore*costo_orario
 Dim Importo_Minuti_Dovuto As Float =minuti*costo_x_Minuto
 Return Importo_Ore_Dovuto+Importo_Minuti_Dovuto
End Sub


1700151210992.png
 

Attachments

  • 1700151172237.png
    1700151172237.png
    46.5 KB · Views: 43

Filippo

Expert
Licensed User
Longtime User
Approfitto della vostra bontà di oggi,
Un ultimo sforzo
Allora approfitta. ;)
B4X:
Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
   
    Dim MyList As List = Array ("02:30", "05:30", "12:45", "03:25", "04:45")
    Dim tempo As Long
    DateTime.DateFormat = "HH:mm"
    For Each tim As String In MyList
        tempo = tempo + DateTime.DateParse(tim)
    Next

    Log("tempo=" & tempo)

    Log(ConvertMillisecondsToString(tempo))
End Sub

Sub ConvertMillisecondsToString(t As Long)
    Dim hours, minutes As Int
    hours = t / DateTime.TicksPerHour
    minutes = (t Mod DateTime.TicksPerHour) / DateTime.TicksPerMinute
    CalcolaStipendio(hours, minutes, 5.00)
End Sub

Sub CalcolaStipendio(ore As Int, minuti As Int,costo_orario As Double) As Double
    Dim total As Double = (ore * costo_orario) + (minuti * costo_orario / 60)
    Log(total)
    Return total
End Sub
 

Xfood

Expert
Licensed User
Dato che suppongo non sia di grano 😄 (una cavolatina devo scriverla, no?!) non sarà che hai un campo di tabella-db?

Se fosse così, potresti salvare gli orari come Ticks di B4X e all'occorrenza sommarli, sottrarli e formattarli in visualizzazione.
Devo ancora creare l'app, quindi posso ancora decidere come salvare i dati.
Dici neldb tipo intero, e salvo il valore come ticks?
 

Xfood

Expert
Licensed User
Allora approfitta. ;)
B4X:
Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
   
    Dim MyList As List = Array ("02:30", "05:30", "12:45", "03:25", "04:45")
    Dim tempo As Long
    DateTime.DateFormat = "HH:mm"
    For Each tim As String In MyList
        tempo = tempo + DateTime.DateParse(tim)
    Next

    Log("tempo=" & tempo)

    Log(ConvertMillisecondsToString(tempo))
End Sub

Sub ConvertMillisecondsToString(t As Long)
    Dim hours, minutes As Int
    hours = t / DateTime.TicksPerHour
    minutes = (t Mod DateTime.TicksPerHour) / DateTime.TicksPerMinute
    CalcolaStipendio(hours, minutes, 5.00)
End Sub

Sub CalcolaStipendio(ore As Int, minuti As Int,costo_orario As Double) As Double
    Dim total As Double = (ore * costo_orario) + (minuti * costo_orario / 60)
    Log(total)
    Return total
End Sub
Ottimo.. grazie.
 
Top