我需要显示一个带有当前时区缩写的标签。 我的电脑时区当前设置为"(GMT)格林威治标准时间:都柏林、爱丁堡、里斯本、伦敦"。 因此,我希望看到显示 BST,因为 LN 目前处于英国夏令时。
该信息(时区缩写)似乎不可用。 查看GMT TimeZoneInfo,我所能看到的关于名字的
只是Id "GMT Standard Time"
StandardName "GMT Standard Time"
DaylightName "GMT Daylight Time"
有什么方法可以从"GMT夏令时"或任何其他可用的Windows时区信息访问BST?
TimeZoneInfo
类将"英国夏令时"称为"GMT Daylight Time",所以不,这是不可能的。如果Microsoft将其存储为"BST",它将位于DaylightName
属性中。
多年前在BCL博客上关注TimeZoneInfo
类的发展时,我没有看到他们如何为DaylightName
选择值的解释。如果我猜的话,那是因为这是针对"时区"而不是特定城市。
看起来公共领域的tzdatabase被认为比Microsoft的时区数据库更完整,确实显示了伦敦的BST(来源)。这是因为此数据集中包含城市,而不仅仅是时区。有一个名为Noda Time的项目将tzdatabase带到了.Net,现在已经可用了。
您应该知道,所有显示"标准"的时区都会在夏季正确切换到夏令时。例如,TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time")
将是一个可以正确处理标准时间和日光时间的对象。例如,"Pacific Standard Time"
也是如此.
我认为您有两种选择:GMT 时区的特殊情况处理,或"Microsoft使用错误名称的时区"的通用处理。
例如,我想知道葡萄牙人在冬天是否使用"GMT"作为他们的时区。 无论他们是否这样做,我都怀疑他们在夏天使用"英国夏令时"!