【问题标题】:Get Timezone using method FindSystemTimeZoneById not returning proper Timezone object使用 FindSystemTimeZoneById 方法获取时区不返回正确的时区对象
【发布时间】:2016-07-23 06:53:10
【问题描述】:

我正在使用从 TimeZoneId 获取时区的方法

var timezoneObject= TimeZoneInfo.FindSystemTimeZoneById("UTC");

我所期待的

timezoneObject.Id : UTC
timezoneObject.DisplayName :(UTC) Coordinated Universal Time
timezoneObject.StandardName: Coordinated Universal Time
timezoneObject.DaylightName: Coordinated Universal Time

但我得到的结果是

timezoneObject.Id : UTC
timezoneObject.DisplayName :UTC
timezoneObject.StandardName: UTC
timezoneObject.DaylightName: UTC

但万一

var timezoneObject= TimeZoneInfo.FindSystemTimeZoneById("Dateline Standard Time"); 

它提供所需的输出。

【问题讨论】:

  • 时区信息来自注册表。 “UTC”除外,that is intercepted early。源代码表明可能存在注册表中没有它的 Windows 版本。不确定这是否准确,但是我可以想象程序员通过编辑注册表解决了他们的日期时间问题:) 功能,而不是错误。

标签: c# datetime timezone


【解决方案1】:

使用这个方法,你会得到你想要的结果:

var timezoneObject = TimeZoneInfo.GetSystemTimeZones().FirstOrDefault(x=> x.Id == "UTC");

输出:

timezoneObject.Id : UTC
timezoneObject.DisplayName :(UTC) Coordinated Universal Time
timezoneObject.StandardName: Coordinated Universal Time
timezoneObject.DaylightName: Coordinated Universal Time

来自文档:

id 参数必须与时区的注册表完全对应 输入长度,但不是大小写,以便成功匹配;那 是,id与时区标识符的比较是 不区分大小写。如果要检索基于时区对象 部分匹配,您可以编写与 由返回的 TimeZoneInfo 对象的只读集合 GetSystemTimeZones 方法。

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 2014-05-11
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多