Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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# 检查TimeSpan是否在夏令时转换中下降_C#_Asp.net_.net Core_Timespan - Fatal编程技术网

C# 检查TimeSpan是否在夏令时转换中下降

C# 检查TimeSpan是否在夏令时转换中下降,c#,asp.net,.net-core,timespan,C#,Asp.net,.net Core,Timespan,我有航班到达时间和航班起飞时间。我必须检查飞行时间是否在夏时制转换(春分转换)中。如果时间是向前的,我需要在飞行时间中增加一小时;如果时间是向后的,我需要从飞行时间中扣除一小时 在TimeZoneInfo类中,我们确实有IsDaylightSavingTime,但它只说明时间是否为夏令时 我需要检查我的时间跨度是否受夏令时转换的影响 更新1:过渡期是在3月和11月,但是日期每年都会改变,所以我不能硬编码任何日期。我需要知道春分点发生的具体日期 更新2:Datetime是本地时间而不是UTC时间,

我有航班到达时间和航班起飞时间。我必须检查飞行时间是否在夏时制转换(春分转换)中。如果时间是向前的,我需要在飞行时间中增加一小时;如果时间是向后的,我需要从飞行时间中扣除一小时

TimeZoneInfo
类中,我们确实有
IsDaylightSavingTime
,但它只说明时间是否为夏令时

我需要检查我的时间跨度是否受夏令时转换的影响

更新1:过渡期是在3月和11月,但是日期每年都会改变,所以我不能硬编码任何日期。我需要知道春分点发生的具体日期

更新2:Datetime是本地时间而不是UTC时间,因为航班到达和起飞都来自同一机场

数据: 航班起飞时间:2019年3月19日23:00
航班到达时间:2019年3月20日08:00
飞行时间:7小时,但由于春分,它的8小时是在
2019年3月20日05:58

为您提供所需信息:

提供有关时区调整的信息,例如从夏令时到夏令时的转换

上述链接中示例代码的输出示例:

W. Europe Standard Time Adjustment rules  
Start Date: Monday, January 01, 0001  
End Date: Friday, December 31, 9999  
Time Change: 1:00 hours  
Annual Start: The Last Sunday of March at 2:00 AM  
Annual End: The Last Sunday of October at 3:00 AM  
此外,如果特定值因日光转换而无效,系统会提示您

您可以使用以下命令将其转换为有效的日期时间:

TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById(id);

if (timeZone.IsInvalidTime(dateTime))
    dateTime = TimeZoneInfo.ConvertTime(dateTime.ToUniversalTime(), timeZone);
最后,我的建议是将DateTime存储并评估为UTC,以避免歧义。您可以将其转换为本地时间,仅用于GUI目的


编辑:是否有一个如何使用GetAdjustmentRules的示例。

使用UTC表示出发时间和到达时间,然后分别将其转换为本地时间。使用NodeTime如何执行此操作?获取两个
zoneDateTime
s之间的
Duration
应该很简单。@ElmoDev001我需要检查今年春分的发生时间,然后我必须检查我的时间跨度是否为init。如果你能用示例数据具体说明这一点,那将非常有帮助。例如,我们不知道您的出发和到达时间是当地时间(可能不明确)还是UTC时间(不明确)。请注意,如果您只有本地时间,那么如果您离开或到达的时间不明确(在回退转换期间),您将丢失数据。请注意,DST转换通常不会发生在精确的春分点上-我会避免提及春分点,除非这对你的问题非常重要,否则会令人困惑。@Jackboys:不,那不安全。如果航班在1:20起飞,1:40到达,可能是20分钟或80分钟。基本上,如果你只有当地时间,那么一年中的两个小时,这些时间是不明确的。您正在丢失信息-就这么简单。感谢您的输入,我已经检查了函数,但它返回了不正确的数据,就像我的数据一样,
{System.TimeZoneInfo.AdjustmentRule}DateEnd:{12/31/2006 00:00:00:00}DateStart:{01/01/0001 00:00:00}DaylightDelta:{01:00:00}daylighttransitioned:d:{System.TimeZoneInfo.TransitionTime}DaylightTransitionStart:{System.TimeZoneInfo.TransitionTime}
我想获取当前年份的DST过渡日期时间查看DaylightTransitionStart结构。您有月、周和周。所有数据都在那里,您只需将这些数据拼凑在一起。在您的第一条评论中,您查看的是过去的日光标准,有效期为2006年12月31日。数组中可能还有其他调整规则.看看这个问题,其中有一个如何使用GetAdjustmentRules的示例