Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как отнять одно время от другого на C#


Автор: Teran 9.6.2006, 09:40
Как на C# отнять одно время от другого и получить результат в часах?
такой вот код почемуто ругается
Код

            DateTime Tim= new DateTime(2006,1,1,0,0,0);
            DateTime Tim1= new DateTime(2006,1,1,0,0,0);
  
            Tim=Tim.AddMinutes(120);

            Tim=Tim-Tim1;  // Вот так не получается отнять

            MessageBox.Show(Tim.ToString("hh:mm tt"));

 smile  smile  smile  

Автор: HalkaR 9.6.2006, 09:56
Код

            DateTime a = new DateTime();
            DateTime b = new DateTime();

            TimeSpan ts = a.Subtract(b);
            return ts.TotalHours;
 

Автор: Teran 9.6.2006, 10:59
а почему нельзя перевести его в double отнять а затем - обратно в DateTime (как в delphi например)??? 

Автор: HalkaR 9.6.2006, 11:06
Teran, можно и отнять, но тогода у тебя не будет возможности получить разницу в часах. Собственно обьект TimeSpan предназначен для разниц во времени и удобен для этого. 

Автор: ivashkanet 9.6.2006, 13:19
Цитата(Teran @  9.6.2006,  10:59 Найти цитируемый пост)
перевести его в double отнять

Только если перевести в DateTime.Ticks --- время в 100-х наносекунд (10^-9=нано) с начала века (помоему прошлого). Тип результата -- long 
Можно отнять эти тики, а потом назад в датутайму залить (не пробовал). 

Автор: Сарт 15.6.2006, 15:57
Могу предложить свой вариант,только не уверен покатит или нет с DataTime.
Итак,создаем 3 переменных(ну или 2,кому как нравиться).
h-часы
m-минуты

Код

string h;
string m;
string h1;
string m1;
int rezulth;
int rezultm 
Console.WrileLine("Введите часы");
h=Console.Readline();
Console.WriteLine("Введите минуты");
m=Console.Readline();

Console.WrileLine("Введите часы");
h1=Console.Readline();
Console.WriteLine("Введите минуты");
m1=Console.Readline();

rezulth=Convert.ToInt32(h)-Convert.ToInt32(h1);
rezultm=Convert.ToInt32(m)-Convert.ToInt32(m1);

Ну тут всякие проверки и т.д. К вычитанию мона еще добавить и abs ,чобы отрицалова не получилось=)

Console.WriteLine("Результат {0} часов {1} минут",Convert.ToStr(rezulth),ConvertToStr(rezultm));


Прошу строго не судить, сам работоспособность не проверял, лениво Студию грузить....Но походу пахать должно. 

Автор: mr.DUDA 15.6.2006, 16:42
мой вариант - круче всех и самый короткий:

Код
int numHours = (time1 - time2).TotalHours
 
smile  

Автор: Сарт 15.6.2006, 22:01
Зато мой--работает практически на любом языке=). Где есть функция перевода из стринга в инт и наоборот=) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)