Обчислення, скільки хвилин буває від двох разів


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 років після того, як було поставлено оригінальне нередаговане запитання.
Кейн


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.