Разница во времени между 2 временными промежутками не возвращает ожидаемые данные - PullRequest
3 голосов
/ 21 июля 2011

Я создал 2 промежутка времени ниже:

TimeSpan currentTs = TimeSpan.FromSeconds(43995); //12:13:15
TimeSpan towTime = TimeSpan.FromSeconds(303072); //12:11:12

Я пытаюсь найти разницу в минутах (по секундам, которые я передаю, похоже, что они в разные дни).Я надеюсь, что разница составит около 2 минут, но на самом деле я получаю -57 минут.

int timeDifference = (int)currentTs.Subtract(towTime).Minutes;

Может кто-нибудь объяснить, что я делаю неправильно?

Ответы [ 5 ]

5 голосов
/ 21 июля 2011

Если вы просто ищете разницу между минутами (не считая дней, часов или секунд), тогда вы можете использовать

double timeDifference = currentTs.Minutes - towTime.Minutes; // 2

Это только разница между компонентами минут.Как говорили другие люди, эти времена разделены на 3 дня, поэтому интервал времени, возможно, не идеален.

Или, если вы хотите, чтобы секунды также были включены, вы можете использовать

TimeSpan minutes1 = new TimeSpan (0, currentTs.Minutes, currentTs.Seconds);
TimeSpan minutes2 = new TimeSpan (0, towTime.Minutes, towTime.Seconds);

double timeDifference = minutes1.TotalMinutes - minutes2.TotalMinutes // 2.05;
3 голосов
/ 21 июля 2011

Полагаю, вы хотите полностью игнорировать тот факт, что время меняется примерно на 3 дня. В этом случае, если вы возьмете остаток после деления на 86400 (количество секунд в дне) и передадите его в TimeSpan.FromSeconds, вы должны получить то, что хотите:

TimeSpan currentTs = TimeSpan.FromSeconds(43995 % 86400); //12:13:15
TimeSpan towTime = TimeSpan.FromSeconds(303072 % 86400); //12:11:12, ignoring the 3 days.
double timeDifference = (currentTs - towTime).TotalMinutes;

Я получил значение timeDifference как 2,05, когда попробовал это.

Конечно, если currentTs раньше, чем towTime (возможно, потому что между ними наступает полночь), разница во времени будет отрицательной. Если вы все еще хотите посчитать количество минут между ними, предполагая, что currentTs всегда следует за towTime, то вам нужно добавить 1440 (количество минут в дне) к timeDifference, если оно работает отрицательный:

if (timeDifference < 0)
{
    timeDifference += 1440;
}
3 голосов
/ 21 июля 2011

Вы ищете свойство TotalMinutes, а не Minutes - более поздняя - это только минутная часть разницы во времени, первая - это полная разница во времени, выраженная в дробных минутах:

double timeDifference = currentTs.Subtract(towTime).TotalMinutes;

Также легче читать это:

double timeDifference = (currentTs - towTime).TotalMinutes;
1 голос
/ 21 июля 2011

Поскольку второй временной интервал не 12:11:12, а 3: 12: 11: 12.

Таким образом, вы получите отрицательный результат, который был бы в тысячах, если бы вы это сделалиобщее количество минут (поскольку оно представляет собой что-то вроде -2days, 57 минут, 57 секунд) ... так как вы просто запрашиваете минуты, а не TotalMinutes, вы просто получаете -57.

0 голосов
/ 21 июля 2011

currentTime меньше чем towTime (кажется, вам не хватает одной цифры).

...