在 C# 中使用 DateTime 和 TimeSpan 进行计算
Calculation with DateTime and TimeSpan in C#
我需要在 C# 中计算一个操作的已用时间和剩余时间。
我以 HH:MM:SS
的字符串格式保存了操作的开始
我有一个字符串格式的默认操作时间长度HH:MM:SS
现在我要计算:
- 剩余时间/额外时间:比如操作仍然低于默认长度,则显示-HH:MM:SS,如果操作时间超过默认时间,则显示+HH:MM:SS
- 如果操作时间长一些,我也想有%样式的HH,MM的double值。例如:3小时30分应该显示为3,5
两个结果并排显示。
我知道我必须将字符串值转换为 DateTime and/or TimeSpan 值才能进行计算,但目前我不知道如何计算,因为例如第一个操作不会给我一个负值,但只是返回时间 [昨天 22:30:00].
首先将默认时间保存为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"));
试试这个..
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
}
我需要在 C# 中计算一个操作的已用时间和剩余时间。 我以 HH:MM:SS
的字符串格式保存了操作的开始我有一个字符串格式的默认操作时间长度HH:MM:SS
现在我要计算:
- 剩余时间/额外时间:比如操作仍然低于默认长度,则显示-HH:MM:SS,如果操作时间超过默认时间,则显示+HH:MM:SS
- 如果操作时间长一些,我也想有%样式的HH,MM的double值。例如:3小时30分应该显示为3,5
两个结果并排显示。 我知道我必须将字符串值转换为 DateTime and/or TimeSpan 值才能进行计算,但目前我不知道如何计算,因为例如第一个操作不会给我一个负值,但只是返回时间 [昨天 22:30:00].
首先将默认时间保存为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"));
试试这个..
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
}