gpt4 book ai didi

c# - .Net 应用程序根据传递的时区语言读取时区注册表

转载 作者:行者123 更新时间:2023-11-30 20:37:53 24 4
gpt4 key购买 nike

我正在使用 .net 应用程序,其中应用程序读取时区并从服务器的时区注册表中获取值。

我面临的问题是,应用程序试图读取任何非英语时区标准名称(例如“东京标准时间”[记住这个字符串是日语])的注册表并找到注册表作为具有英语语言的注册表。

请看下面的代码片段:

@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones"))

foreach (TimeZoneInformation tzi in TimeZones)
{
if (tzi.StandardName.ToLower() == timeZoneStandardName.ToLower())
{
//If Day light doesn't apply to given timezone then return standard offset
//sb.AppendLine();
//sb.AppendLine("========Matching Registry Foung ======");
//sb.AppendLine("Timezone bias value : " + tzi.tzInfo.bias);
if (tzi.tzInfo.daylightDate.wYear == 0 && tzi.tzInfo.daylightDate.wMonth == 0 && tzi.tzInfo.daylightDate.wDay == 0 &&
tzi.tzInfo.daylightDate.wHour == 0 && tzi.tzInfo.daylightDate.wMinute == 0 && tzi.tzInfo.daylightDate.wSecond == 0)
{
//if offset positive then add bias

if (isOffSetPositive)
{
date = date.AddMinutes(tzi.tzInfo.bias);
}
else
{
date = date.AddMinutes(-tzi.tzInfo.bias);
}
//sb.AppendLine("Updated DateTime value : "+ date.ToString());
//ExceptionManager.LogInforamtion(sb.ToString());

return;
}

系统配置:操作系统:Windows server 2008 R2 Standard

基本操作系统语言:英语 [美国]

我想要的是根据应用程序的时区语言获取时区注册表名称。

请随时提出相关问题,我可能遗漏了一些有用的信息。

最佳答案

一些事情:

  • 您不应该通过读取注册表来创建自己的 TimeZoneInformation 类。只需使用已经完全做到这一点的 System.TimeZoneInfo

  • 您应该使用时区的 Id 进行匹配,它与注册表项的名称相同。这些是准确的英文字符串,从未翻译成其他语言。不匹配 StandardName

  • StandardNameDaylightNameDisplayName 值确实已根据操作系统语言本地化。它们不参与 .NET 全局化,如果不在操作系统中安装语言包并切换到其他语言,您就无法获取它们。

  • 您使用 AddMinutes 转换时间并尝试仅根据偏差进行计算的方式在很多层面上都是错误的。不要写那个代码。只需使用 ConvertTimeTimeZoneInfo 类中的相关函数。

  • 对于替代方法和更好的本地化,您可以考虑使用 Noda TimeTimeZoneNames库。

关于c# - .Net 应用程序根据传递的时区语言读取时区注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35653947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com