如何使用 DateTime 计算经过的持续时间

问题描述

我有一个问题。在此代码中,一步时间和循环时间计算为 0。它不会计算一分钟过去之前的秒。但是,当它是 1 分钟时,它会计算分钟。但我们希望它单独计算。我们在哪里犯错?

30 秒内完成一分钟,60 秒内必须是 1 分钟。

StepPerMinute 应该只在它完成一分钟后才响应,否则它应该落入导管块,但我遇到了问题。

AStepDuration 必须每秒计算一次,但 1 分钟后开始计算,然后返回零。

循环时间总是为零。

if (stepCount == 1)
{
    firstStepTime = DateTime.Now;
}
else if (stepCount > 1)
{
    DateTime stepTime = DateTime.Now;
    var result = stepTime.Subtract(firstStepTime);
    var totalMinutes = Convert.ToInt16(result.TotalMinutes);
    totalSeconds = Convert.ToInt16(result.TotalSeconds);

    try
    {
        stepsPerMinute = Convert.ToInt16(stepCount / totalMinutes);
        AStepDuration = (Convert.Todouble( totalSeconds ) / stepCount);
        CycleTime = totalSeconds * (2 / stepCount); 
    }
    catch (DivideByZeroException)
    {
      stepsPerMinute = stepCount;
    }

    Console.WriteLine("Total time: {0}",totalMinutes+"dk");
    Console.WriteLine("Total second : {0}",totalSeconds+"sn");
    Console.WriteLine("Steps Per Minute(Cadence): {0}",stepsPerMinute +"step/min");
    Console.WriteLine("A Step Duration: {0}",AStepDuration);
    Console.WriteLine("Cycle Time: {0}",CycleTime + "sn");
}

解决方法

我不确定 Kinect 是否有 StopWatch,但是,如果它可用,那么您可以像这样使用它,而不是使用 DateTime

    Stopwatch stopWatch = new Stopwatch();

    // you may stop like this stopWatch.Stop()
    // or reset like this stopWatch.Reset()
    if (stepCount == 1)
    {
        stopWatch.Start();
    }
    else if (stepCount > 1)
    {
        try
        {
            stepsPerMinute = Convert.ToInt16(stepCount / stopWatch.Elapsed.Minutes);
            BirAdimSüresi = (Convert.ToDouble(stopWatch.Elapsed.Seconds) / stepCount);
            CycleTime = stopWatch.Elapsed.Seconds * (2 / stepCount); // saniye or CycleTime =120/ cadence

        }
        catch (DivideByZeroException)
        {
            stepsPerMinute = stepCount;
        }

        Console.WriteLine("Total time: {0}",stopWatch.Elapsed.Minutes + "dk");
        Console.WriteLine("Total seconds : {0}",stopWatch.Elapsed.Seconds + "sn");
        Console.WriteLine("Steps Per Minute(Cadence): {0}",stepsPerMinute + "step/min");
        Console.WriteLine("Bir Adim Süresi: {0}",BirAdimSüresi);
        Console.WriteLine("Cycle Time: {0}",CycleTime + "sn");
    }