C# 边际时间的夏令时更改计划触发器
我正在编写一个日程安排应用程序,我很好奇如何处理以下有关夏令时(DST)更改的边缘情况: 比如说,我们在时区,DST:C# 边际时间的夏令时更改计划触发器,c#,dst,C#,Dst,我正在编写一个日程安排应用程序,我很好奇如何处理以下有关夏令时(DST)更改的边缘情况: 比如说,我们在时区,DST: 从2014年3月9日凌晨2:00:00开始(时钟向前调整) 于2014年11月2日凌晨2:00结束(时钟向后调整) 假设最终用户将我的应用程序安排在2014年11月2日凌晨2:00:00 我们假设现在的本地日期/时间是2014年11月2日凌晨1:59:99 我的应用程序应该在什么时候启动日程安排——1秒之内,还是1小时1秒之内 是否有一个标准来定义如何处理这种情况?根据夏令
- 从2014年3月9日凌晨2:00:00开始(时钟向前调整)
- 于2014年11月2日凌晨2:00结束(时钟向后调整)
如果您在一秒钟内触发它,而用户希望在3点钟停止该计划,它将运行两个小时,而不是一个看起来不正确的时间(2-3=1小时)。我同意所有评论,即“您应该做什么”高度依赖于用户的期望,但无论如何,我将给出我的意见 如果要安排单个事件,则应该能够测试用户提供的日期和时间,以查看它是否无效(在春季DST转换中)或不明确(在秋季DST转换中)。在无效情况下,提示类似“对不起,该时间无效”的内容。在不明确的情况下,提示类似“您是指1:30 PDT(UTC-7)还是1:30 PST(UTC-8)”,并相应地处理选择 但我将从一个重复事件的用例来处理您的问题,例如每天同时触发的每日闹钟。作为闹钟的使用者,我会期望什么
- 如果我把每天的时间安排在凌晨2:00,但在春季过渡期,时钟从1:59:59转到3:00:00,我希望闹钟在3:00:00就响。我当然不希望它在4:00:00响——那会多出一个小时。我也不希望仅仅因为2:00从技术上讲并没有发生,闹钟就不响
- 如果我将每天的时间安排在凌晨1:00,但在秋季过渡期间,时钟从1:59:59返回到1:00:00-作为此闹钟的用户,我希望它只在第一次出现时(白天)熄灭。发生两次会很烦人 但在这里,我们看到这如何说明需要了解用户的期望。如果我能告诉我的闹钟让我把那额外的一小时拨回来呢?“请闹钟先生,我想用我额外的DST时间睡到很晚。在第二次出现的1:00叫醒我。”-现在我个人还没有见过任何这样工作的闹钟,但我想你明白我的意思了
有关DST行为的更多信息,请参见中的图表。用户如何输入计划?是否可以向他们提供一些关于转换的提示,并强制他们选择一个唯一的时间(然后将其转换为UTC)?如果你只是接受简单的日期/时间输入,我会认为更有趣的日程安排问题是什么时候启动计划为2014-3-9 02:30:00的活动?谢谢大家。最终用户从日期/时间选择器控件中选择时间,我不想让他们更难(处理UTC)。至于Tim的问题,我正在考虑处理这些边缘日期的标准。这是基于观点的,即关于堆栈溢出的离题。。。但我想说,正如你提到的,这是一个边缘案例——如果你想保持事情简单,在这两种情况下都触发。如果你想让事情复杂化,问问对方他希望在什么时候制定时间表。我会选择第一个解决方案…@Damien_异教徒:是的,我处理类似于
2014-Mar-9 02:30:00
的情况。在这种情况下,应用程序将显示一个错误,即日期不存在。我也必须为此编写计划代码,除了按照用户的期望执行之外,没有标准的方法来处理此问题。由于我们不是您的用户,我们无法告诉您正确的做法是什么。这句话似乎是说,25小时的一天中,01:00
发生两次(毕竟,时钟在移动之前到达01:59
)。目前还不清楚用户会如何设置一个警报,使其比您建议的答案早一小时(或更短)发出。发布Wikipedia链接需要+1,特别是解析链接需要+1。(我错过了那一段。)+1用于wiki链接。伙计,这个DST真是一团糟。为了回答你的问题,那么是的,我需要一个周期闹钟类型的单一时间表。那么回到DST——比如说,在Windows上,如何获得特定年份DST规则的可靠信息呢?我找到了GetTimeZoneInformation
API,但是