TimeSpan从负值到正转换的差异

时间:2012-01-19 08:40:16

标签: c# .net timespan

TimeSpan Earlybeforetime = new TimeSpan();
Earlybeforetime = earlybefore.Subtract(Convert.ToDateTime(outtime);

有时会返回负值。如何将值转换为始终为正?

3 个答案:

答案 0 :(得分:19)

您可以使用Negate()将负值更改为正

来自MSDN

  

如果当前实例的日期和时间早于值,   该方法返回表示负时间的TimeSpan对象   跨度。也就是说,它的所有非零属性的值(例如   天或蜱)是负面的。

因此,您可以根据哪个值更大来调用Negate方法并获得正Timespan

假设我们有startDateendDate endDate大于startDate ),所以当我们这样做时 startDate.Subtract(endDate)我们会得到否定的TimeSpan。因此,基于此检查,您可以转换负值。因此,如果你的早期时间提前,它会给你一个负面的TimeSpan

修改

请检查Duration()的{​​{1}}这应该为您提供绝对值始终

TimeSpan

答案 1 :(得分:8)

当您的Earlybeforetime早于 时,会返回负值。 如果你想在两个时间点之间有绝对的“距离”,你可以使用TimeSpan.Duration方法,例如:

TimeSpan first = TimeSpan.FromDays(5);
TimeSpan second = TimeSpan.FromDays(15);
TimeSpan final = first.Subtract(second).Duration();


Console.WriteLine(final);

此方法将返回绝对TimeSpan值。

答案 2 :(得分:1)

var startTime = new TimeSpan(6, 0, 0); // 6:00 AM
var endTime = new TimeSpan(5, 30, 0); // 5:30 AM 
var hours24 = new TimeSpan(24, 0, 0);
var difference = endTime.Subtract(startTime); // (-00:30:00)
difference = (difference.Duration() != difference) ? hours24.Subtract(difference.Duration()) : difference; // (23:30:00)
如果我们比较两个不同的日期乘以24小时new TimeSpan(24 * days, 0, 0)

还可以添加日期之间的差异