我需要计算C#中操作的传递时间和剩余时间。 我以字符串格式HH:MM:SS
保存操作的开始我的操作的默认时间长度为字符串格式HH:MM:SS
现在我想计算:
两个结果彼此相邻显示。 我知道我必须将字符串值转换为DateTime和/或TimeSpan值来进行计算,但目前我不知道如何计算,因为第一个操作例如不会给我一个负值,但只是回到过去[昨天22:30:00]。
答案 0 :(得分:2)
试试这个..
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
}
答案 1 :(得分:1)
首先将默认时间保存为TimeSpan。然后你可以使用DateTime.Now并在操作开始时保存它。完成另一个DateTime.Now。在此之后,您可以计算当前操作的TimeSpan。然后,您可以将这两个TimeSpans的差异计算为另一个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"));