Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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语言中计算运行时间时的夏令时问题#_C#_.net - Fatal编程技术网

C# 在C语言中计算运行时间时的夏令时问题#

C# 在C语言中计算运行时间时的夏令时问题#,c#,.net,C#,.net,我正在计算我的项目所用的时间。 例如, 开始时间是2011年11月6日01:59:58上午 结束时间为2011年11月6日凌晨01:00:00 实际运行时间为00:00:02 但经过的时间是-00:59:58(由于夏时制,时钟向后退了1小时) 如何在夏令时使用正确的运行时间更好地计算此值 代码: DateTime startDttm = DateTime.Parse("Nov 06, 2011 01:59:58 AM"); DateTime endDttm = DateTime.Parse(

我正在计算我的项目所用的时间。
例如,
开始时间是2011年11月6日01:59:58上午
结束时间为2011年11月6日凌晨01:00:00
实际运行时间为00:00:02
但经过的时间是-00:59:58(由于夏时制,时钟向后退了1小时)
如何在夏令时使用正确的运行时间更好地计算此值

代码:

DateTime startDttm = DateTime.Parse("Nov 06, 2011 01:59:58 AM");  
DateTime endDttm = DateTime.Parse("Nov 06, 2011 01:00:00 AM");  
TimeSpan elapsedTime = endDttm.Subtract(startDttm);  
Console.WriteLine("Elapsed Time - " + elapsedTime);

使用协调世界时来存储时间戳。无论何时比较协调世界时中的两个时间戳,都会得到正确的差值

在C语言中,您可以使用
DateTime dt=DateTime.UtcNow
获得该格式的当前时间戳


另请参见。

您的值基本上是不明确的-这两个时间都发生了两次,假设时钟回到凌晨2点

如果您知道要将开始时间视为较早的选项,将结束时间视为较晚的选项,则可以使用:

然而,在一个理想的世界中,您不必解析含糊不清的本地时间,并猜测它们是早一点还是晚一点。这里的背景是什么


如果可能,请将数据源更改为记录UTC日期/时间,而不是本地日期/时间。。。理想情况下,使用更易于解析的格式,例如yyyy-MM-ddTHH:MM:ss

首先将其转换为unix时间戳,然后计算它。检查Noda时间api。尝试将其转换为UTC,如startDttm.ToUniversalTime();结束。ToUniversalTime();然后尝试了Subtract(),也给出了相同的结果。在进行转换时,您需要考虑时区。@Vinoth:您的计算基本上是不明确的。例如,如果您的时间是01:30:00和01:45:00,则正确答案可能是15分钟或1小时15分钟。这就是使用本地日期/时间的问题。你一定要吗?乔恩,你不想要zone.AtLater(结束)?@IanHorwill:哦,是的:)现在经过的时间是按要求的。写这封信的时候我一定是半睡半醒了——抱歉!
using System;
using NodaTime;
using NodaTime.Text;

public class Test
{
    static void Main(string[] args)
    {
        var pattern = LocalDateTimePattern.CreateWithInvariantInfo
              ("MMM dd, yyyy HH:mm:ss tt");
        LocalDateTime start = pattern.Parse("Nov 06, 2011 01:59:58 AM").Value;
        LocalDateTime end = pattern.Parse("Nov 06, 2011 01:00:00 AM").Value;

        DateTimeZone zone = DateTimeZone.ForId("America/Chicago");

        // Where this is ambiguous, pick the earlier option
        ZonedDateTime zonedStart = zone.AtEarlier(start);

        // Where this is ambiguous, pick the later option
        ZonedDateTime zonedEnd = zone.AtLater(end);

        Duration duration = zonedEnd.ToInstant() - zonedStart.ToInstant();

        // Prints 00:00:02
        Console.WriteLine(duration.ToTimeSpan());
    }        
}