Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# DateTimeOffset如何处理夏令时?_C#_.net_Scheduling_Datetimeoffset_Nodatime - Fatal编程技术网

C# DateTimeOffset如何处理夏令时?

C# DateTimeOffset如何处理夏令时?,c#,.net,scheduling,datetimeoffset,nodatime,C#,.net,Scheduling,Datetimeoffset,Nodatime,我在数据库中以一周中的一天、一小时和一分钟的形式存储时间表。当数据被读取时,我们为该天的下一个事件创建一个DateTime对象,时间和分钟,但我需要修改它以了解DST。如有必要,我可以修改数据库 我知道DateTimeOffset存储UTC日期/时间和偏移量。我还知道,DateTimeOffset应该用于“使用夏令时” 我很难理解的是,DateTimeOffset“如何使用夏令时”。我的理解是,夏令时是一个政治决定,不能纯粹从抵消中推断出来,这一点几乎没有。如果这个结构只存储一个偏移量而不存储一

我在数据库中以一周中的一天、一小时和一分钟的形式存储时间表。当数据被读取时,我们为该天的下一个事件创建一个
DateTime
对象,时间和分钟,但我需要修改它以了解DST。如有必要,我可以修改数据库

我知道
DateTimeOffset
存储UTC日期/时间和偏移量。我还知道,
DateTimeOffset
应该用于“使用夏令时”


我很难理解的是,
DateTimeOffset
“如何使用夏令时”。我的理解是,夏令时是一个政治决定,不能纯粹从抵消中推断出来,这一点几乎没有。如果这个结构只存储一个偏移量而不存储一个指定的时区或国家,它怎么可能是DST友好的呢?

DateTimeOffset
本身并不真正了解DST,但
TimeZoneInfo
是。
DateTimeOffset
表示时间上的一个固定时刻,因此您可以通过时区感知的东西获得
DateTimeOffset
。换句话说,如果我现在在英国要求一个
DateTimeOffset
,我最终会得到一个距离UTC+1小时的偏移量。如果我在英国12月的某个时间要求一个
DateTimeOffset
,我最终会得到一个与UTC的偏移量为0小时的东西

如果更改数据库以包含偏移量,并根据用户选择的
日期时间
(应为“未指定”)及其时区创建
日期时间偏移量
,则在考虑DST的情况下,这将为您提供正确的偏移量


但有一件事需要注意:如果我现在为“2年时间”安排一些事情,而你现在就确定了补偿,那么将来补偿可能不正确——例如,当DST应用时,政府可能会改变,显然这不会改变数据库中存储的内容。

如果“下一步”发生了什么在DST转换期间,日期和时间是否会出现差距?也就是说,由于时间提前了整整一个小时,所以该时间永远不会出现在那天。我不认为有什么神奇的解决方案可以直接插上电源。@Damien_不信者提出了一个很好的观点,反过来也应该考虑——一个本地时间可以在同一天发生两次。当您从LoalDATECTIME转换为ZONDATEDTIME时,NODA时间迫使您考虑这些选项。NET没有:(工作基本完成了,我现在正在测试它-野田佳彦时间是神奇的解决方案,因为它告诉我所有关于跳过的时间、映射中的模糊性等:)在数据库中,我存储了星期几、小时、分钟和时区。调度程序使用此数据和节点时间计算事件下次触发的本地时间。如果出现未解决的歧义,它会给我发电子邮件。@Jon Noda Time准备好在这样的场景中投入生产使用了吗?@StephenKennedy:我不知道时区计算等方面有任何问题-剩余的1.0版本之前的大部分工作都是围绕文本格式化/解析。考虑到我们还没有达到1.0,我会谨慎地采用它-如果我是你的话,我会为你的特定用例做很多测试-但是如果你想在使用野田佳彦的时候得到任何支持,我很乐意提供帮助,我相信邮件列表中的其他成员也会这样。@StephenKennedy:在UTC中做任何事情都应该很好-基本上,您应该存储与单个UTC时间相对应的东西,无论是DateTimeOffset还是其他什么。“我真的很想听听你对野田佳彦的看法——请给我发邮件。”不信野田佳彦的达米恩·乔恩的回答很恰当,但我们从那以后又向前迈进了很多。我使用Noda-Time实现计算,并使用模糊处理来解决Damien提出的问题,然后将结果映射到DateTimeOffset并将其输入调度程序。我对这项工作的轻松性印象深刻,对初步结果也很满意。@Triynko:老实说,这听起来应该是一个新问题。