Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 边际时间的夏令时更改计划触发器_C#_Dst - Fatal编程技术网

C# 边际时间的夏令时更改计划触发器

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秒之内 是否有一个标准来定义如何处理这种情况?根据夏令

我正在编写一个日程安排应用程序,我很好奇如何处理以下有关夏令时(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秒之内

是否有一个标准来定义如何处理这种情况?

根据夏令时规则:

…在春天,时钟从01:59的最后一刻开始向前跳 标准时间为夏令时03:00,当天为23小时,而 秋季时钟从01:59的最后时刻向后跳到 01:00标准时间,重复该小时,该天有25分钟 小时。[37]本地时间的数字显示器不能准确读取02:00 在夏季转换时,而是从01:59:59.9向前跳 到03:00:00.0

因此,虽然世界各地的时间和日期不同,但规则是相似的(忽略了澳大利亚的豪勋爵岛,该岛实行半小时轮班制)。向后或向前跳跃的时间不会被触摸,而是跳跃到的时间

所以我认为你应该在一小时零一秒内启动时间表


如果您在一秒钟内触发它,而用户希望在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规则因时区而异。世界并不是同时进行DST测试的。很多东西根本做不到


有关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,但是