【问题标题】:Get localized date time string and time zone name in differnet languages on windows [duplicate]在Windows上以不同语言获取本地化的日期时间字符串和时区名称[重复]
【发布时间】:2011-01-09 01:25:18
【问题描述】:

是否有任何 Windows API 或语言功能(C++、C#)来获取不同语言的本地化格式的时间、日期和时区名称

编辑:在 C# 中,我可以获得日期和时间的本地化字符串,但似乎 TimeZoneInfo 没有本地化字符串。我也没有在注册表中找到它。很可能您需要自己翻译时区名称。

// Localize date for french
DateTime d = new DateTime.Now;
Console.WriteLine(d.ToString("D", new CultureInfo("fr-FR")));

【问题讨论】:

    标签: c# c++ winapi localization timezone


    【解决方案1】:

    【讨论】:

    • 这显然需要您自己进行本地化。这是没有必要的,因为操作系统已经在某处有一组本地化字符串。
    • 它便携且易于扩展——如果您觉得将自己锁定在 Microsoft 的翻译中是合适的,请随意。此外,我相信您可以找到预发布的本地化列表。
    【解决方案2】:

    请参阅 GetTimeFormatGetDateFormatGetTimeZoneInformation 函数。要获取时区的本地化名称,您可能需要将其从注册表中拉出。请参阅TIME_ZONE_INFORMATION structure 的文档。

    【讨论】:

    • 你不需要去注册表,有一个配置正确的系统本地化格式的调用(只是提醒一下——你应该可以在 MSDN 上找到它,我没有'不记得我头顶上的电话)。
    【解决方案3】:

    至少从 XP SP3 开始,Win32 API GetTimeZoneInformation 会生成本地化的名称。事实上,我发现这个问题的原因是我想要一种将这些字符串强制转换为英文的方法,因为我将它们放在调试日志中,并且我希望能够在不流利的情况下理解它们。自然语言。 :-)

    【讨论】:

    • 您是否设法将其强制为英语?这将是我问题解决方案的一部分。
    • 在意识到偏差字段是我的案例的关键信息后,我决定跳过它。区域名称只是我的案例的门面装饰,因为实际的区域是政治化的混乱。
    • GetDynamicTimeZoneInformation 似乎返回TimeZoneKeyName 中的注册表项,如果需要,可以使用它映射到英文名称 - 请参阅msdn.microsoft.com/en-us/library/ms724253%28v=VS.85%29.aspx
    猜你喜欢
    • 1970-01-01
    • 2019-02-19
    • 2018-08-09
    • 2014-02-22
    • 2020-10-01
    • 2012-02-27
    • 1970-01-01
    • 2016-07-11
    • 2019-11-09
    相关资源
    最近更新 更多