Разница во времени между отрицательным значением и положительным конвекцией - PullRequest
7 голосов
/ 19 января 2012
TimeSpan Earlybeforetime = new TimeSpan();
Earlybeforetime = earlybefore.Subtract(Convert.ToDateTime(outtime);

Иногда возвращает отрицательное значение.Как преобразовать значение, чтобы оно всегда было положительным?

Ответы [ 3 ]

20 голосов
/ 19 января 2012

Вы можете использовать Negate(), чтобы изменить отрицательное значение на положительное

С MSDN

Если дата и время текущего экземпляра раньше значения, метод возвращает объект TimeSpan, который представляет отрицательное время пяди. То есть значение всех его ненулевых свойств (таких как Дни или тики) отрицательный.

Таким образом, вы можете вызвать метод Negate в зависимости от того, какое значение больше и получить положительное значение Timespan

Скажем, у нас есть startDate и endDate ( endDate больше чем startDate ), поэтому, когда мы делаем startDate.Subtract(endDate) мы бы получили отрицательный TimeSpan. Таким образом, на основе этой проверки вы можете преобразовать отрицательное значение. Так что, если ваш перерыв опережает ранее, это даст вам отрицательный интервал времени

EDIT

Пожалуйста, отметьте Duration() из TimeSpan, это должно дать вам абсолютное значение всегда

Earlybeforetime.Duration()

8 голосов
/ 19 января 2012

Отрицательные значения возвращаются, когда ваш Earlybeforetime ранее этого времени. если вы хотите иметь абсолютное «расстояние» между двумя точками во времени, вы можете использовать метод TimeSpan.Duration, например:

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


Console.WriteLine(final);

этот метод вернет абсолютное значение TimeSpan.

1 голос
/ 09 октября 2017
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)

...