Scusa l'ignoranza sui millisecondi, ma così non va bene?
Public Sub Main()
'' occorre attivare gb.util
Print Date.ToUnixTime(Now) ' secondi
Print Date.ToUnixTime(Now) * 1000 ' millisecondi
End
:ciao: :ciao:
:ciao:
Stavo riguardando la questione dei millisecondi...
Time per esempio restituisce anche i millisecondi, anche se succede una cosa strana:
Public Sub Main()
Print "Pippo " & Time
Print Time
End
Nel primo Print ottengo anche i millisecondi
Nel secondo Print no! :-\
Un baco?
Wait è espresso con un numero decimale in secondi, con risoluzione al millisecondo (0.001), sembrerebbe!
Nel primo Print ottengo anche i millisecondi
...sembrerebbe che l'operatore " & " determini quel fenomeno.
Provate anche il semplice esempio:
Public Sub Main()
Print Null & Time
End
Torno alla questione della quantità di secondi trascorsi dalla data iniziale UNIX.
Ebbene, a me queste due righe non restituiscono il medesimo risultato: :hard:
Public Sub Main()
Print CFloat(DateDiff(CDate("01/01/1970"), Now, gb.Second))
Print CFloat(Date.ToUnixTime(Now))
End
Affinché i due risultati siano identici, devo aggiungere 4 ore alla data/orario presente nella prima riga, cioè così: :-\
Public Sub Main()
Print CFloat(DateDiff(CDate("01/01/1970 04:00:00"), Now, gb.Second))
Print CFloat(Date.ToUnixTime(Now))
End
Risulta anche a voi ? ???
Il problema sembra essere la prima riga, giacché utilizzando funzioni esterne standard C, ottengo il risultato identico alla seconda riga:
Library "libc:6"
Public Struct timespec
tv_sec As Long
tv_nsec As Long
End Struct
Private Const CLOCK_REALTIME As Integer = 0
' int clock_gettime (clockid_t __clock_id, struct timespec *__tp)
' Get current value of clock CLOCK_ID and store it in TP.
Private Extern clock_gettime(__clock_id As Integer, __tp As Timespec) As Integer
Public Sub Main()
Dim spec As New Timespec
clock_gettime(CLOCK_REALTIME, spec)
Print spec.tv_sec, "(dalla funzione esterna)"
Print CFloat(Date.ToUnixTime(Now)), "(con il Metodo .ToUnixTime() )"
Print CFloat(DateDiff("01/01/1970 04:00:00", Now, gb.Second)), "(con 4 ore aggiuntive)"
Print CFloat(DateDiff("01/01/1970", Now, gb.Second)), "(senza ore aggiuntive)"
End
@Kicco
Bisognerebbe capire esattamente quali passaggi addotta Print per trasformare in String ciò che scrive.
Infatti se scriviamo Print CStr(time) otteniamo i millisecondi...
@Vuott
Risulta anche a voi ? ???
Io ottengo lo stesso risultato: :-\
Public Sub Main()
Print CFloat(DateDiff(CDate("01/01/1970 04:00:00"), Now, gb.Second))
Print CFloat(Date.ToUnixTime(Now))
End
In Console:
:ciao: :ciao:
P.S. Il tuo SO è localizzato?
Ho fatto una specie di prova del nove e ora mancano le due ore canoniche :-\
Public Sub Main()
Dim i, u, r As Float
i = 60 * 60 * 24 ' ottengo gli ms di un giorno
u = CFloat(Date.ToUnixTime(Now)) ' ottengo gli ms da epoca
r = u / i
r = Frac(r) ' ottengo la rimanenza odierna
Print Time(r) ' la tramuto in tempo, e se aggiungessimo 2 ore...
End
... Scusate avevo saltato un passaggio...
:ciao: :ciao:
Affinché i due risultati siano identici, devo aggiungere 4 ore alla data/orario...
Confermo!
:ciao:
Infatti, se facciamo "la prova del nove" :
Public Sub Main()
Dim i, u, r As Float
i = 60 * 60 * 24 ' ottengo gli ms di un giorno
u = CFloat(DateDiff("01/01/1970", Now, gb.Second)) ' ottengo (dovrei ottenere) gli ms da epoca
r = u / i
Print Int(r) ' ottengo i giorni per curiosità :-)
r = Frac(r) ' ottengo la rimanenza odierna
Print Time(r) ' la tramuto in tempo, e se sottraggo 4 ore ottengo UTC (- 2 il tempo locale) MISTERO
End
Otteniamo le 4 ore in più sul tempo UTC
:ciao: :ciao: