[Gambas-user] UTC conversion Tip for Date class doesn't work as expected
Benoît Minisini
gambas at ...1...
Sat Nov 29 01:24:16 CET 2014
Le 29/11/2014 00:57, T Lee Davidson a écrit :
> http://gambaswiki.org/wiki/lang/type/date says, "Dates can be converted
> to numbers. Then the number returned is the number of days stored
> internally and the fraction of day represented by the number of
> microseconds."
>
> And ,there is a tip box that says:
> [[ tip
> As date are internally stored in UTC, the time offset between local time
> and UTC is represented by the fractional part of the floating point
> number returned by the date to float conversion.
>
> So, to convert a date into UTC, you do the following:
> UTCDate = LocalDate - Frac(Date(Now))
> ]]
>
> 1. It is unclear to me how the fractional part can represent both "the
> fraction of day represented by the number of microseconds" *and* "the
> time offset between local time and UTC", especially since it would
> always be changing.
>
> 2. A simple command-line app is apparently also confused:
> Public Sub Main()
>
> Dim dDate1, dDate2 As Date
>
> Print "System.TimeZone: " & System.TimeZone
> Print "Number of hours to add: " & Str(System.TimeZone / 60 / 60)
> Print "Frac(Date(Now)): " & Frac(Date(Now)) & "\n"
>
> dDate1 = Now
> Print "Date now : " & Format(dDate1, "yyyy/mm/dd hh:nn")
> dDate2 = dDate1 - Frac(Date(Now)) 'To follow example
> Print "UTC date now: " & Format(dDate2, "yyyy/mm/dd hh:nn") & "\n"
>
> Print "Difference: " & DateDiff(dDate1, dDate2, gb.Hour)
>
> End
>
> On my system, this produced:
> System.TimeZone: 18000
> Number of hours to add: 5
> Frac(Date(Now)): 0.79166666651145
>
> Date now : 2014/11/28 18:49
> UTC date now: 2014/11/27 23:49
>
> Difference: -19
>
>
> Instead of adding 5 hours, it subtracted 19.
>
>
You're right, the tip is false, i.e. it works only when System.TimeZone
< 0, otherwise you have a 24h error. It was written before
System.TimeZone exist.
So you must do that instead:
UTCDate = DateAdd(LocalDate, gb.Second, System.TimeZone)
And the wiki must be fixed...
Regards,
--
Benoît Minisini
More information about the User
mailing list