Подсчет количества минут между двумя временами


86

В моем приложении есть datagridview, в котором указаны время начала и окончания. Я хочу посчитать количество минут между этими двумя временами. Пока у меня есть:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = TimeSpan.FromMinutes(varTime);

Но последняя строка не компилируется, потому что в ней говорится, что я использую недопустимые аргументы для конструктора Timespan. Я довольно много исследовал, как рассчитать количество минут между двумя моментами, но я натолкнулся на кирпичную стену. Кто-нибудь может посоветовать мне, как лучше всего достичь моей цели.

РЕДАКТИРОВАТЬ/

Теперь мой код выглядит следующим образом:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = (int)varTime.TotalMinutes;

Но во второй строке я получаю неверный результат. И varFinish, и varValue - это время, например, 10:00 и 8:00. Не знаете, почему они не приводят к типу DateTime?


Если varFinish является строкой, вы не можете преобразовать строку в DateTime. Вам нужно использовать DateTime.Parse (...). Даже тогда это будет означать сегодняшнюю дату, если в varFinish нет даты.
— Джим

Ответы:


160

Попробуй это

DateTime startTime = varValue
DateTime endTime = varTime

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (minutes): " + span.TotalMinutes );

Изменить: если вы пытаетесь «span.Minutes», это вернет только минуты промежутка времени [0 ~ 59], чтобы вернуть сумму всех минут из этого интервала, просто используйте «span.TotalMinutes».


2
Это хороший ответ, но дает 0 на промежутке. Минуты, когда разница между двумя значениями превышает 1 час (то есть 60 минут или более)
— Асиф Мехмуд

6
@MalikAsif. Я просто попробовал это с промежутком в 61 минуту, и, как и ожидалось, у меня получилось 1 час и 1 минута. Если бы интервал был ровно 60 минут, то да, минуты были бы равны нулю. Вы о чем думали TotalMinutes()?
— Джим

17
НЕ ПРАВДА. span.Minutesвозвращает число [0..59]. Использовать span.TotalMinutesвместо
— Стен Петров

2
Это не должен быть принятым ответом. Согласно другим комментариям, это не решает вопрос должным образом.
— tjmoore

2
@tjmoore спасибо за отзыв, я с вами согласен. Я ответил на исходный вопрос еще в январе 2012 года, после чего вопрос был отредактирован. Иногда я получаю отрицательные голоса за этот ответ, вероятно, потому, что большинство людей читают ответ через 5 лет после того, как был задан исходный неотредактированный вопрос.
— Kane

35
double minutes = varTime.TotalMinutes;
int minutesRounded = (int)Math.Round(varTime.TotalMinutes);

TimeSpan.TotalMinutes : общее количество минут, представленное этим экземпляром.


2
Да, TotalMinutes - это то, что я искал. Большое спасибо ^ _ ^
— Вахид Битар

int minutesRounded = (int) Math.Round (минуты);
— Sagi

9

В вашем коде вопроса вы TimeSpan.FromMinutesнеправильно используете . См. Документацию MSDN для TimeSpan.FromMinutes, в которой приводится следующая сигнатура метода:

public static TimeSpan FromMinutes(double value)

следовательно, следующий код не будет компилироваться

var intMinutes = TimeSpan.FromMinutes(varTime); // won't compile

Вместо этого вы можете использовать свойство TimeSpan.TotalMinutes для выполнения этой арифметики. Например:

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes;
int wholeMinutes = (int)fractionalMinutes;


1

Если разница между endTime и startTime больше или равна 60 минутам , выражение: endTime.Subtract(startTime).Minutes;всегда будет возвращаться (minutesDifference % 60). Очевидно, что нежелательно, когда мы говорим только о минутах (а не о часах здесь).
Вот несколько способов, если вы хотите получить total number of minutes(в разных типах):

// Default value that is returned is of type *double* 
double double_minutes = endTime.Subtract(startTime).TotalMinutes; 
int integer_minutes = (int)endTime.Subtract(startTime).TotalMinutes; 
long long_minutes = (long)endTime.Subtract(startTime).TotalMinutes; 
string string_minutes = (string)endTime.Subtract(startTime).TotalMinutes; 
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.