在 C# 应用程序中基于 TimeZoneId 获取当前文化信息

Get current culture info based on TimeZoneId in C# application

在我的 C# 控制台 (.NET Core) 应用程序中,我将 user TimeZoneId(例如孟加拉国标准时间) 保存到数据库中。现在基于这个时区 ID,我想获取当前的文化信息。更具体地说,我想要 2 个字母的 ISO 名称(例如 BD、美国、英国)。我可以使用下面的代码来获取当前文化信息以获取我的 2 个字母的 ISO 名称。但它总是显示 - en。原因可能是我在 Windows 10 的控制面板中将语言设置设置为英语。所以我没有找到预期的输出。这就是为什么我想获取基于 TimeZoneId 的文化信息,因为它已保存到数据库中。我用来获取当前文化的代码:

CultureInfo ci = CultureInfo.InstalledUICulture;

Console.WriteLine("Default Language Info:");
Console.WriteLine("* Name: {0}", ci.Name);
Console.WriteLine("* Display Name: {0}", ci.DisplayName);
Console.WriteLine("* English Name: {0}", ci.EnglishName);

Console.WriteLine("* 2-letter ISO Name: {0}", ci.TwoLetterISOLanguageName);
Console.WriteLine("* 3-letter ISO Name: {0}", ci.ThreeLetterISOLanguageName);

当前输出:

任何人都可以给我一个 C# 示例来获得我的解决方案吗?

时区和culture/locale是正交的概念。他们完全断开了连接。无法从时区区分文化,反之亦然。

例如,我可能是讲英语的美国人(文化代码en-US),但我可能正在日本旅行或居住(IANA 时区Asia/Tokyo,时间Windows区域 ID Tokyo Standard Time).

在 .NET 中更具体:

CultureInfo.CurrentCulture    // how do you want your numbers and dates to be formatted?
CultureInfo.CurrentUICulture  // what language and dialect do you speak?
TimeZoneInfo.Local.Id         // what time zone are you observing? (on the local computer)