可以使用TimeZoneDisplayName找到TimeZoneById吗?

cho*_*bo2 2 .net c# asp.net

我正在使用asp.net mvc,我正在使用此网站上的方法.

如何枚举.NET中的所有时区?

所以这就是我在做的事情.然后,我将结果显示给用户.用户选择他们的时区,我将显示名称保存在数据库中.

但是我现在正在尝试实际进行时区转换.

我试图这样做(我不确定这是否是正确的方法).

  TimeZoneInfo zoneInfo  = TimeZoneInfo.FindSystemTimeZoneById(id);
  var time = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now, zoneInfo);
Run Code Online (Sandbox Code Playgroud)

所以我认为这是正确的,它获取系统时间和用户时区,并使用此信息将其转换为本地UTC时间.

所以假设我做得很好(如果不是请纠正我),我面临的问题是如何获得ID?

我不知道如何找到id.就像我愿意在数据库中保存ID而不是DisplayName,但我不知道如何从DisplayName中找出ID.

谢谢

Mar*_*ell 6

也许在启动时将它们缓存在字典中:

static readonly Dictionary<string, TimeZoneInfo> zones
    = TimeZoneInfo.GetSystemTimeZones().ToDictionary(z => z.DisplayName);
Run Code Online (Sandbox Code Playgroud)

然后获取zones[displayName](或通过,zones.TryGetValue(displayName, out zone)如果你想要安全).