Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Private tmr As Timer 'Timer per aggiornare la Label ad ogni secondo
Private orainizio As Long 'Variabile per salvare l'orario di inizio sessione
End Sub
Sub Globals
'These global variables will be redeclared each time the activity is created.
Private Label1 As B4XView
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout")
tmr.Initialize("Tempo", 1000) 'Inizializzo il Timer ad 1 secondo con EventName "Tempo"
DateTime.TimeFormat = "HH:mm:ss" 'Imposto il formato ora desiderato per la visualizzazione
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Private Sub Tempo_Tick
'Nella Label, ogni secondo, viene scritto il tempo trascorso che è dato da:
'Orario attuale - Orario di Inizio Sessione - Le ore del fuso per non avere modifiche all'orario (trasformate in Ticks)
Label1.Text = "La tua Sessione dura da " & DateTime.Time(DateTime.Now - orainizio - (DateTime.GetTimeZoneOffsetAt(DateTime.Now) * 3600000))
End Sub
Private Sub Button1_Click
orainizio = DateTime.Now 'Salvo l'orario di inizio sessione
tmr.Enabled = True 'Abilito il Timer
End Sub
Forse ci sono soluzioni anche più eleganti.
Questo codice è valido per monitorare una sessione in tempo reale dal suo inizio (dato dal Click sul Button1).
Se usato durante il cambio da ora legale a ora solare sicuramente darà risultati sballati. ?
Prendilo come spunto iniziale.
Il modo più corretto sarebbe quello di far uso delle funzioni disponibili in DateUtils.
Utili anche nel caso i due orari appartengano a giorni diversi.
Se puo' ancora servire pubblico, con tutta l'umiltà che posso esprimere, due funzioncine una ritorna la differenza tra due orari e l'altra ti da l'ora attuale nel formato hh:mm:ss
B4X:
public Sub sDiffOre(pOra1 As String, pOra2 As String,tipo As String) As Int
Dim xOra1 As Long= DateTime.TimeParse(pOra1)
Dim xOra2 As Long= DateTime.TimeParse(pOra2)
Dim diff As Long =xOra2-xOra1
Dim ret As Int =0
If tipo.ToLowerCase="s" Then
ret= diff/1000
End If
If tipo.ToLowerCase="m" Then
ret= (diff/1000)/60
End If
If tipo.ToLowerCase="h" Then
ret= (diff/1000)/3600
End If
Return ret
End Sub
Public Sub sOraTtuale() As String
Dim OraAtt As Long = DateTime.Now
Dim Ora As String = ""
Dim Minuti As String =""
Dim Secondi As String = ""
Ora = DateTime.GetHour(OraAtt)
Minuti = DateTime.GetMinute(OraAtt)
Secondi = DateTime.GetSecond(OraAtt)
If Ora.Length=1 Then Ora="0" & Ora
If Minuti.Length=1 Then Minuti="0" & Minuti
If Secondi.Length=1 Then Secondi="0" & Secondi
Return Ora & ":" & Minuti & ":" & Secondi
End Sub
Certo un po' "casereccio"...ma funzionano...non ho implementato la differenza tra ore in giornate diverse...a breve lo farò...
un piccolo esempio
B4X:
Dim OraAttuale As String = sOraTtuale
Dim Ora1 As String = "08:30:10"
Dim Ora2 As String = "20:30:10"
If sDiffOre(Ora1,OraAttuale,"s") >=0 And sDiffOre(OraAttuale,Ora2,"s") >=0 Then
'' il tuo codice
end if
'oppure
Dim Ora1 As String = "08:30:10"
Dim Ora2 As String = "20:30:10"
log ("Secondi tra " & ora1 & " e " & Ora2 =" & sDiffOre(Ora1,Ora2,"s"))