[Gambas-user] Daylight "saving" and time zones
Benoît Minisini
g4mba5 at gmail.com
Sun Oct 27 19:25:43 CET 2019
Le 27/10/2019 à 18:22, T Lee Davidson a écrit :
> On 10/26/19 9:42 PM, Jussi Lahtinen wrote:
>> Is there a reliable way to detect any of those shenanigans happening
>> to system clock?
>> And how much is shifted and in what direction?
>>
>
>> Let's say I want this; date(2019,10,27,2,3) in UTC, but I'm in
>> different time zone (or perhaps even suddenly changing time zone
>> without any warning). How I get the Date() function to return correct
>> values?
>>
>> It would be easy, if date would accept one more argument;
>> date(2019,10,27,2,3, "UTC")...
>>
>
> I think I must be missing something in what you are asking since I'm
> almost certain that you, knowing more about Gambas than I, must already
> be aware of the gb.util Date functions and System.TimeZone.
>
> It is recommended that a system with only Linux on it should have the
> hardware (CMOS) clock set to UTC. If that is the case, then the system
> clock should not change. (Linux uses the glibc time functions to convert
> the system time to local time as needed using the time zone info stored
> under, eg., /usr/share/zoneinfo.)
>
> System.TimeZone yields, "the number of seconds you must add to the local
> time to get the UTC time." Since this number can be negative, this gives
> us the amount of shift and the direction. Following the example in the
> Wiki, if one's time zone is UTC+2, System.TimeZone will return -7200
> since one would actually have to subtract 7200 seconds to get back to a
> UTC representation.
>
> gb.util has Date.FromUTC ("Move a date back to local time if its local
> representation is actually in UTC.") and Date.ToUTC ("Move a date so
> that its local representation is its UTC value."). So then perhaps one
> could do:
> Date.ToUTC(date(2019,10,27,2,3))
>
>
> ___
> Lee
>
That's it.
You must understand that there is always an implicit timezone when
dealing with a date as as string, or with the Date() function and the
functions of the same family: Year(), Month()...
The implicit timezone is always the local timezone (as returned by
System.TimeZone) except for CStr() and CDate(), that assumes UTC timezone.
Internally, the date is stored in UTC.
Regards,
--
Benoît Minisini
More information about the User
mailing list