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: 119

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
 

LucaMs

Expert
Licensed User
Longtime User
Ho fatto come ho scritto e funziona, anche perchè toglie semplicemente un ora al risultato
Non penso proprio sia corretto, perché bisognerebbe vedere per quale motivo senza aggiungerebbe un'ora, in quanto magari con l'ora legale non lo farebbe (o ne aggiungerebbe due?).

Insomma, tutta la faccenda va capita a fondo, una volta per tutte.
 
Top