Bug #21144
closed
Win32: Use Windows time zone ID as the time zone name if TZ is not set
Description
Problem¶
On Windows, the Time#zone
uses _tzname
provided by the runtime library.
This is obtained by using GetTimeZoneInformation
, if the TZ
environment variable is not set or empty.
The problem is that the StandardName
and DaylightName
in that information are for UI, and localized.
This means that these names may vary across different international editions and language packs, even for the same time zone.
Solution¶
Use the Windows time zone ID by using GetDynamicTimeZoneInformation
, which is available since Windows Vista and Windows Server 2008.
Since the TimeZoneKeyName
is the registry key of time zones, the above problem does not occur.
This is also mitigate [Bug #20929].
Even it is possible to define non-ascii key name time zone, there is no such name in the standard installations.
Compatibilities etc¶
- This also changes the result of
Time#inspect
, may not be good for ones who prefer the display names for UI. - There is no way to restore
zone
fromMarshal
data, this does not improve. - The PR GH-12765 changes the signature of
ruby_reset_timezone()
and marks internal use only, but this function is declared ininternal/time.h
and probably no problem.