从负值到正值转换的TimeSpan差异

问题描述 投票:0回答:4
TimeSpan Earlybeforetime = new TimeSpan();
Earlybeforetime = earlybefore.Subtract(Convert.ToDateTime(outtime);

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

c# .net timespan
4个回答
26
投票

您可以使用

Negate()
将负值更改为正值

来自MSDN

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

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

Timespan

假设我们有

startDate
endDate
endDate 大于 startDate),所以当我们这样做时
startDate.Subtract(endDate)
我们会得到负面的
TimeSpan
。因此,根据此检查,您可以转换负值。因此,如果您的 outtime 提前,则会给您带来负的 TimeSpan

编辑

请检查

Duration()
TimeSpan
,这应该始终为您提供绝对值

Earlybeforetime.Duration()


11
投票

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

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


Console.WriteLine(final);

此方法将返回绝对 TimeSpan 值。


3
投票
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)


0
投票

posativeSpan = new TimeSpan(negativeSpan.Ticks * -1);

© www.soinside.com 2019 - 2024. All rights reserved.