C# 英国夏令时 (BST) 时区缩写

Posted

技术标签:

【中文标题】C# 英国夏令时 (BST) 时区缩写【英文标题】:C# british summer time (BST) timezone abbreviation 【发布时间】:2012-04-24 22:58:13 【问题描述】:

我需要显示一个带有当前时区缩写的标签。我电脑的时区当前设置为“(格林威治标准时间)格林威治标准时间:都柏林、爱丁堡、里斯本、伦敦”。因此,我希望看到 BST 显示,因为 LN 目前处于英国夏令时。

该信息(时区缩写)似乎不可用。查看 GMT TimeZoneInfo,关于名称我能看到的只有

Id  "GMT Standard Time"
StandardName    "GMT Standard Time"
DaylightName    "GMT Daylight Time"

有什么方法可以从“GMT Daylight Time”或任何其他可用的 Windows 时区信息到达 BST?

【问题讨论】:

【参考方案1】:

您应该知道,所有标有“标准”的时区都会在夏季正确切换到夏令时。例如TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time") 将是一个可以正确处理标准时间和日光时间的对象。例如,"Pacific Standard Time" 也是如此。

【讨论】:

【参考方案2】:

TimeZoneInfo 类将“英国夏令时间”称为“GMT 夏令时间”,所以不,这是不可能的。如果 Microsoft 将其存储为“BST”,它将位于 DaylightName 属性中。

虽然多年前在 BCL 博客上开发了 TimeZoneInfo 类,但我没有看到他们如何为 DaylightName 选择值的原因。如果我猜是因为这是针对“时区”而不是特定城市。

看来,被认为比 Microsoft 的时区数据库更完整的公共域 tzdatabase 确实显示了伦敦的 BST (source)。这是因为城市包含在这个数据集中,而不仅仅是时区。 有一个名为 Noda Time 的项目将 tzdatabase 带到现在可用的 .Net。

【讨论】:

用指向 Noda Time Beta nuGet 包的链接更新了答案。【参考方案3】:

我认为您有两个选择:GMT 时区的特殊情况处理,或“Microsoft 使用错误名称的时区”的通用处理。

例如,我想知道葡萄牙人是否在冬季使用“GMT”作为他们的时区。不管他们是否这样做,我怀疑他们在夏天使用“英国夏令时”!

【讨论】:

以上是关于C# 英国夏令时 (BST) 时区缩写的主要内容,如果未能解决你的问题,请参考以下文章

PHP 时区问题 |英国夏令时和格林威治标准时间

英国夏令时; BST 元素的总和大于其直接子元素的总和

英国伦敦时区是UTC+几?(windows 7小工具设置)

在python中将具有时区缩写的非UTC时间字符串转换为UTC时间,同时考虑夏令时

时区缩写

Java 的 BST ZoneId 代表啥?