2012-05-08 6 views
9

В моем приложении у меня есть 4 TextBoxes и 2 TextBoxes для ввода времени начала и 2 TextBoxes для ввода времени окончания.Получение разницы во времени между двумя значениями

Пользователь всегда будет вводить завершенное время, поэтому вход всегда будет 11:30, 12:45 и т. Д.

Как я могу получить разницу между часами и минутами между началом и окончанием?

+0

Нечто подобное [здесь] (http://stackoverflow.com/ вопросы/2821040/как-делать-я-получить в-временной разницы между ними, две даты и времени-объектов, использующих-C). – RBT

ответ

14

Использовать класс TimeSpan и метод Subtract для DateTime.

 DateTime t1 = Convert.ToDateTime(textBox1.Text); 
     DateTime t2 = Convert.ToDateTime(textBox2.Text); 
     TimeSpan ts = t1.Subtract(t2); 
+0

отлично работает, но результат 02:30:00, можно ли удалить секунды, чтобы он отображал что-то вроде этого 2:30? – PandaNL

+1

@PandaNL: Используйте модификатор формата, например '.ToString (" hh: mm ")'. – Skalli

+0

Если вы работаете только со временем, вам действительно нужно использовать 'TimeSpan' вместо' DateTime'. –

0

конвертировать часы в считанные минуты, добавлять их в существующие минуты, конвертировать их до полных секунд, делать то же самое с окончанием времени. минус их друг от друга, конвертировать их обратно в часы и минуты. вспоминая 60 минут в час, 60 секунд в минуту, вот как я справился бы с этим. потому что полные секунды всегда будут одинаковыми, и он пытается научить компьютер, который пытается обернуть вокруг от 60 до 0 или от 12 до 1. намного проще использовать somethign совершенно линейно, как секунды. затем переконвертировать вверх

+0

, так как вы можете увидеть im больше для того, чтобы сделать логику, поэтому ее более понятно для меня, а не для всех остальных, просто делая даты даты ... xD – RhysW

+1

Это очень сложное, TimeSpan проще и безопаснее для пользователя. – Skalli

+0

Мне пригодились проблемы со своим старым наставником, где нам нужно было делать тряпки, не используя встроенные функции, чтобы лучше понять, как это работает, и научить нас быть более логичным, все еще неспособным сломать эту привычку печально – RhysW

1
TimeSpan difference = DateTime.Parse(txtbox1.Text) - Datetime.Parse(txtbox2.Text); 

Пример:

TimeSpan difference = DateTime.Parse("12:55")-DateTime.Parse("11:45"); 
double hourDiff= difference.TotalHours; 
double minutes = difference.TotalMinutes; 
Console.WriteLine(hourDiff);//1.16666666666667 
Console.WriteLine(minutes);//70 
5

создать два DateTime объектов разбора значения в TextBox управления и просто вычесть два DateTime, вы получите TimeSpan объект, который является то, что вы ищете ,

6

Вы можете получить TimeSpan разницу путем вычитания.

TimeSpan time1 = TimeSpan.Parse(textBox1.Text); 
TimeSpan time2 = TimeSpan.Parse(textBox2.Text); 

TimeSpan difference = time1 - time2; 

int hours = difference.Hours; 
int minutes = difference.Minutes; 
1

Использование TimeSpan:

DateTime dt1 = new DateTime(starttime.text); 
    DateTime dt2 = new DateTime(endtime.text); 

    TimeSpan result = dt2 - dt1; 

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

0

Вы можете отнять два DateTime и получать TimeSpan. Это имеет свойства для получения Days, Hours, Minutes, Seconds и т.д.

var first = new DateTime(2012, 05, 08, 10, 30, 00); 
var second = new DateTime(2012, 05, 08, 11, 49, 13); 

var diff = first - second; 
var hours = diff.Hours; 
var mins = diff.Minutes; 
3

использовать TimeSpan, нет необходимости использовать даты

var start = TimeSpan.Parse(start.Text); 
var end = TimeSpan.Parse(end.Text); 

TimeSpan result = end - start; 
var diffInMinutes = result.TotalMinutes(); 
Смежные вопросы