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.
Updated by nobu (Nobuyoshi Nakada) about 1 month ago
- Assignee set to windows
Updated by nobu (Nobuyoshi Nakada) about 1 month ago
- Status changed from Open to Closed
Applied in changeset git|3f07bc76ff6a11232d9f18e5eaa31835c195e8f0.
[Bug #21144] Win32: Use Windows time zone ID if TZ is not set
If the TZ environment variable is not set, the time zone names
retrieved from the system are localized for UI display and may vary
across editions and language packs for the same time zone.
Use the time zone IDs that are invariant across environments instead.
Updated by nobu (Nobuyoshi Nakada) about 1 month ago
- Backport changed from 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN to 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED, 3.4: REQUIRED
Updated by ufuk (Ufuk Kayserilioglu) 25 days ago
- Backport changed from 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED, 3.4: REQUIRED to 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED, 3.4: DONE
ruby_3_4 d40c6cf7b606edb815adf7a8e9abe98f38a8f747.
Updated by hsbt (Hiroshi SHIBATA) 19 days ago
- Backport changed from 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED, 3.4: DONE to 3.1: REQUIRED, 3.2: DONE, 3.3: REQUIRED, 3.4: DONE
ruby_3_2 f7ec9546ee07298f5d0aed6fc245e2405fe950bc merged revision(s) 3f07bc76ff6a11232d9f18e5eaa31835c195e8f0, 34098b669c0cbc024cd08e686891f1dfe0a10aaf.
Updated by nagachika (Tomoyuki Chikanaga) 13 days ago
- Backport changed from 3.1: REQUIRED, 3.2: DONE, 3.3: REQUIRED, 3.4: DONE to 3.1: REQUIRED, 3.2: DONE, 3.3: DONE, 3.4: DONE
ruby_3_3 d213eb7f453fa0bd6c476826c450d9726c3c8b15 merged revision(s) 3f07bc76ff6a11232d9f18e5eaa31835c195e8f0, 34098b669c0cbc024cd08e686891f1dfe0a10aaf.