如何确定给定日期是不是在 .NET 2.0 中给定时区的夏令时?

Posted

技术标签:

【中文标题】如何确定给定日期是不是在 .NET 2.0 中给定时区的夏令时?【英文标题】:How can I determine whether a given date is in Daylight Saving Time for a given timezone in .NET 2.0?如何确定给定日期是否在 .NET 2.0 中给定时区的夏令时? 【发布时间】:2010-09-07 20:54:22 【问题描述】:

我在 .NET 2.0 上,在中等信任下运行(所以 TimeZoneInfo 和注册表是不允许的选项)。我要求用户提供两个日期和一个时区,并且非常希望能够自动确定我是否需要调整 DST 的时区。

这可能甚至不是一个有效的场景,除非我有一些非常强大的支持,例如 TimeZoneInfo,以首先区分所有不同种类的时区。

【问题讨论】:

【参考方案1】:

在 .NET 2.0 中,您必须自己编写代码。它涉及研究各个地区的夏令时法律并将其构建到您自己的数据结构中。如果您只关心时区的子集,例如仅在美国,则问题会有所简化,但是如果您需要所有全球时区,则需要做很多工作,然后必须每次更新代码法律改变的几年。即使是最新版本的 .NET 中的新时区对象也需要更新 Windows 以使其随着法律的变化而保持正确。

查看here、here 和here 了解更多信息。

【讨论】:

更不用说,如果您想准确确定历史日期的 DST 状态,除了必须保持最新状态外,您还必须归档曾经在这些时区应用的所有 DST 规则。我知道目前没有操作系统或库可以这样做。【参考方案2】:

TZ Database 是一个维护良好的时区规则公共域数据库。他们提供的数据也有一种编译格式,并且有很多库可以读取编译数据,比如这个:ZoneInfo (tz database / Olson database) .NET API

【讨论】:

【参考方案3】:

这里有优秀的时区库:TZ4Net

【讨论】:

【参考方案4】:

好吧,由于TimeZoneInfo 被排除在外,您可能不会在框架本身中找到解决方案(但不要引用我的话)。

在这种情况下,您是否考虑过反射TimeZoneInfo 类并使用您在其中找到的内容?

【讨论】:

【参考方案5】:

@Domenic,我考虑过,但我更愿意保持合法性,而且我相当肯定这些信息无论如何都必须嵌入到框架中,或者以某种偷偷摸摸的方式从注册表中获取不需要权限...

【讨论】:

以上是关于如何确定给定日期是不是在 .NET 2.0 中给定时区的夏令时?的主要内容,如果未能解决你的问题,请参考以下文章

如何确定给定时区中的给定时间是不是在postgresql中是DST?

给定特定格式的日期,我如何确定以月为单位的年龄?

python小问题:给定一个日期,如何确定这是今年的第几周?

如何确定删除给定循环是不是会断开图表

给定日期范围(开始日期和结束日期),我如何计算天数,不包括 .Net 中指定的星期几?

如何将给定的序数(来自 Excel)转换为日期