TimeSpan从负值到正值的差异

Rom*_*ndo 9 .net c# timespan

TimeSpan Earlybeforetime = new TimeSpan();
Earlybeforetime = earlybefore.Subtract(Convert.ToDateTime(outtime);
Run Code Online (Sandbox Code Playgroud)

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

V4V*_*tta 21

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

来自MSDN

如果当前实例的日期和时间早于value,则该方法返回表示负时间跨度的TimeSpan对象.也就是说,其所有非零属性(例如Days或Ticks)的值都是负数.

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

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

编辑

请检查Duration()TimeSpan这应该给你总是绝对值

Earlybeforetime.Duration()


Tha*_*ven 8

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

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


Console.WriteLine(final);
Run Code Online (Sandbox Code Playgroud)

此方法将返回绝对TimeSpan值.