我正在尝试计算我的项目的运行时间。
例如,
开始时间是 06-Nov-2011 01:59:58 A.M
结束时间为 06-Nov-2011 01:00:00 A.M
实际耗时为 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);
最佳答案
您的值基本上是模棱两可的 - 这两个时间都发生了 两次 假设时钟在凌晨 2 点拨回。
如果您知道要将开始时间视为较早 选项,而将结束时间作为较晚 选项,则可以使用Noda Time。 :
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());
}
}
然而,在理想的世界中,您不必解析模棱两可的本地时间并猜测它们是早于还是晚于。这里的上下文是什么?
如果完全可能,请更改您的数据源以记录 UTC 日期/时间而不是本地日期/时间...最好采用更易于解析的格式,例如yyyy-MM-ddTHH:mm:ss
关于c# - 在 C# 中计算耗时时出现夏令时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9308476/