Ciao a tutti.
Sto calcolando il tempo di volo con questo codice:
B4X:
IAS = edtVelocità.Text
ALT = edtQuota.Text
DIST = edtDistanza.Text
' Log(edtVelocità.Text &"-"& IAS)
' Log(edtQuota.Text &"-"& ALT)
' Log(edtDistanza.Text &"-"& DIST)
TAS = IAS * (1+(ALT/1000*0.065))
' Log("TAS = "& TAS)
TempoVolo = DIST/TAS*3600*1000
' Log("TempoVolo = " & TempoVolo)
TempoVoloTicks = Round(TempoVolo)
Log("CALCOLA---------------->>>>>>>>TempoVolo IN TICKS = "& TempoVoloTicks)
DateTime.DateFormat="H:mm:ss"
Dim targetTempoVolo As Long = DateUtils.UnixTimeToTicks(TempoVoloTicks)/1000
Dim TempoVoloLeggibile As String = DateTime.Date(targetTempoVolo)
lblTempoVolo.Text = TempoVoloLeggibile
Log("CALCOLA---------------->>>>>>>>TempoVolo H:mm:ss = "& TempoVoloLeggibile)
e sull'emulatore tutto funziona correttamente.
quando lo metto sul mio cellulare mi aggiunge esattamente 1 ora, ma solo in TempoVoloLeggibile mentre TempoVoloTicks è corretto.
Ho pensato che possa dipendere dall'ora legale/solare che l'emulatore puo non considerare mentre il mio cellulare si, ma non capisco come possa entrarci in questo codice, che non tiene conto dell'orario ed oltretutto in questo periodo siamo in ora legale.
Si è vero ma non è quello il problema(l'ho testato). Siccome i dati in input non permettono mai di arrivare a tempi >= di 10 ore, per non avere sempre quello zero inutile davanti nella label ho tolto una H
Comunque stai lavorando con le funzioni DATA e ORA anche se gli passi un valore di TICKS tuo anzichè quello attuale (NOW).
Quindi viene gestito con le impostazioni data/orario correnti.
Tu invece devi lavorare con un periodo di tempo definito quindi imposti il timezone a 0 per non avere modifiche, visto che 1 ora è 1 ora ovunque.
mi toglie un'ora anche in altri campi dove è riportato l'orario di partenza e di arrivo.
Facendo un po' di prove, mi sono accorto che vengono aggiunte o sottratte quante sono le ore di scarto rispetto all'ora UTC
Dovrei limitare l'azione di tale codice solo alla label incriminata, oppure sottrarre lo scarto UTC nella formula di calcolo, ma non so proprio come fare , ora cerco un po' in giro.
All'avvio della app salvi il TimeZone corrente del telefono in una variabile globale
B4X:
Sub Globals
'These global variables will be redeclared each time the activity is created.
Private lbltempovolo As Label
Private zona As Double
End Sub
Sub Activity_Resume
zona = DateTime.TimeZoneOffset 'Salva il TimeZone reale nella variabile zona
End Sub
Quando devi fare il calcolo del tuo tempovolo puoi fare così:
B4X:
DateTime.SetTimeZone(0) 'Imposta il TimeZone a 0 per non avere offset
'Quì effettui i tuoi calcoli
DateTime.SetTimeZone(zona) 'Reimposta il TimeZone reale per poter lavorare correttamente con le date