Italian Formati Ora

Fulvio75

Well-Known Member
Licensed User
Ciao, non mi è chiara una cosa riguardante gli orari ovvero:

B4X:
If ShowSec = True Then
        DateTime.TimeFormat="HH:mm:ss"
    Else If ShowSec = False Then
        DateTime.TimeFormat="HH:mm"
    End If
    
    DateTime.SetTimeZone(1)
    Return DateTime.Time(DateTimeLng)

Se non metto DateTime.SetTimeZone(1)
mi restituisce un orario -1 ora rispetto alla reale, ma non lo fa su tutti i dispositivi, nel senso che ho provato su 3 telefoni e due anche ommettendo DateTime.SetTimeZone(1) mi restituiscono l'ora corretta.
Quindi devo sempre mettere DateTime.SetTimeZone(1) per visualizzare l'ora corretta?

Altra domanda lo devo mettere anche nei calcoli?

B4X:
public Sub Get_DateTime_Diff_Long(StartDateTime As Long,StopDateTime As Long) As Long
    
    DateTime.SetTimeZone(0)
    Return (StopDateTime-StartDateTime)
    
End Sub
 

Fulvio75

Well-Known Member
Licensed User
L'ora è corretta e la differenza ha un'ora di troppo, perchè?
 

Attachments

  • test.zip
    2.9 KB · Views: 234

Fulvio75

Well-Known Member
Licensed User
Cosi va

B4X:
Private Sub Timer_Tick
    
    Dim Time As Long
    
    Time = DateTime.Now
    
    DateTime.TimeFormat = "HH:mm:ss"
    lblOra.Text = DateTime.Time(Time) & " / " & DateTime.Time((DateTime.Now-Start)-DateTime.TicksPerHour)
    
    
    
End Sub

E' corretto?
 

LucaMs

Expert
Licensed User
Longtime User
Altra domanda lo devo mettere anche nei calcoli?
Non devi proprio usarlo.

Un mio msg Telegram di tempo fa:

1710058843335.png
 

LucaMs

Expert
Licensed User
Longtime User
quindi la soluzione -DateTime.TicksPerHour è corretta, sembra funzionare
Tanto per cambiare, ho dimenticato la soluzione che trovai.

Per ora ho trovato solo che scrissi questa funzione:
B4X:
Sub TicksToTimeString(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

 Dim xFormatter As B4XFormatter
 xFormatter.Initialize
 xFormatter.GetDefaultFormat.MinimumIntegers = 2

 Return $"${xFormatter.Format(hours)}:${xFormatter.Format(minutes)}:${xFormatter.Format(seconds)}"$
End Sub
Se poi passandogli la differenza tra due "ticks" (Long) funzioni... non lo ricordo (ma sto per provare)
 

Fulvio75

Well-Known Member
Licensed User
Ho fatto come ho scritto e funziona, anche perchè toglie semplicemente un ora al risultato
 
Top