0

我需要计算 C# 中操作的通过时间和剩余时间。我以 HH:MM:SS 的字符串格式保存了操作的开始

我有一个默认的操作时间长度,字符串格式为 HH:MM:SS

现在我想计算:

  • 剩余时间/额外时间:例如,如果操作仍然低于默认长度,则应显示-HH:MM:SS,如果操作时间超过默认时间,则应显示+HH:MM:SS
  • 如果操作需要更长的时间,我还希望有一个 % 样式的 HH,MM 的 double 值。例如:3小时30分钟应显示为3,5

两个结果将彼此相邻显示。我知道我必须将字符串值转换为 DateTime 和/或 TimeSpan 值才能进行计算,但目前我不知道如何计算,因为例如第一次操作不会给我一个负值,而是及时返回 [昨天22:30:00]。

4

2 回答 2

7

尝试这个..

var start = "17:05:11"; // Pass this as a parameter
var startTime = DateTime.Parse(start);

var defaultDuration = TimeSpan.FromMinutes(2);
TimeSpan operationDuration = startTime - DateTime.Now;

TimeSpan diff = defaultDuration - operationDuration;

if (operationDuration > defaultDuration)
{
    Console.Out.WriteLine($"+{diff.Hours}:{diff.Minutes}:{diff.Seconds}");
}
else
{
    Console.Out.WriteLine($"-{diff.Hours}:{diff.Minutes}:{diff.Seconds}");
    Console.Out.WriteLine($"{diff.Hours},{Math.Round(((double)(diff.Minutes * 100 / 60)),0, MidpointRounding.AwayFromZero)}");//example: 3hours and 30 minutes should be displayed as 3,5
}
于 2017-05-12T07:16:00.353 回答
2

首先将默认时间保存为 TimeSpan。然后你可以拿 DateTime.Now 并在操作开始时保存它。再拿一个 DateTime.Now 稍后当它完成时。在此之后,您可以计算当前操作的 TimeSpan。然后您可以将这两个 TimeSpan 的差异计算为另一个 TimeSpan。它可以是积极的或消极的,有了这些价值观,你可以做任何你想做的事情。

TimeSpan defaultDuration = new TimeSpan(3, 30, 0);
DateTime begin = DateTime.Now;

//Do some work

DateTime end = DateTime.Now;
TimeSpan thisDuration = end - begin;
Console.WriteLine("Default: " + defaultDuration.ToString("hh\\:mm\\:ss"));
Console.WriteLine("This time: " + thisDuration.ToString("hh\\:mm\\:ss"));
Console.Write("Difference: ");
if (thisDuration > defaultDuration)
    Console.Write("-");
Console.WriteLine((thisDuration - defaultDuration).ToString("hh\\:mm\\:ss"));
于 2017-05-12T07:06:17.993 回答