-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[release/6.0] Fix Time Zone when running with Globalization Invariant Mode #59727
Conversation
Tagging subscribers to this area: @tarekgh, @safern |
Tagging subscribers to this area: @dotnet/area-system-runtime |
The failure in |
@Anipik @ericstj @danmoseley looks I don't have permission to merge it. could you please help merging it? thanks! |
@tarekgh done! |
Thanks @safern |
Backport of #59710 to release/6.0
Fixes #59636
/cc @tarekgh
Customer Impact
When enabling the globalization invariant mode on Linux, we'll always fallback to
UTC
time zone which is wrong and a regression from .NET 5.0. We have some docker containers (e.g. Alpine) which enable the globalization invariant mode by default on the whole image; the problem will be obvious there.In .NET 6.0 we have introduced the Globalization Invariant Mode Breaking Change. This breaking change causes throwing exception when enabling the globalization invariant mode and creating any culture other than Invariant culture.
If the globalization invariant mode is enabled and trying to get the local time zone when running on Linux platform, the creation process will try to initialize the display names of the time zone. This initialization tries to reset the UI culture to
en-US
if it is set to Invariant culture. When we have the globalization invariant mode is on, the UI culture will always be Invariant and cause the time zone initialization to fallback toen-US
which will throw exception because it is not allowed to create any other cultures in the Invariant mode. We catch the exception and then fallback to useUTC
time zone instead of the actual time zone set on the running machine.Testing
Manually tested, added a test to fill the gap in testing time zone with the globalization invariant mode, and passing the regression tests and CI run on main branch.
Risk
Low as not changing any logic more than checking for invariant mode and avoid try creating cultures which cause exception throwing. We are back to .NET 5.0 behavior.