2010-10-22 3 views
21

Я пытаюсь собрать инструмент, который поможет мне составить график работы. Какой самый простой способ решить следующее?C#: что является самым простым способом вычитать время?

8:00 утра + 5 часов = 1:00 вечера

и

5:00 вечера - 2 часа = 3:00 вечера

и

5:30 вечера -: 45 = 4 : 45

и так далее.

ответ

42

Все это можно сделать с помощью DateTime.Add(TimeSpan), так как он поддерживает положительные и отрицательные интервалы времени.

DateTime original = new DateTime(year, month, day, 8, 0, 0); 
DateTime updated = original.Add(new TimeSpan(5,0,0)); 

DateTime original = new DateTime(year, month, day, 17, 0, 0); 
DateTime updated = original.Add(new TimeSpan(-2,0,0)); 

DateTime original = new DateTime(year, month, day, 17, 30, 0); 
DateTime updated = original.Add(new TimeSpan(0,45,0)); 

Или вы также можете использовать метод DateTime.Subtract(TimeSpan) аналогичным образом.

+0

ИТАК куда я иду неправильно. Я добавил datetimepicker и присвоил его значение переменной datetime. теперь математические методы не отображаются – Sinaesthetic

+0

@ Синестетика - возможно, стоит опубликовать какой-то код, это немного другой вопрос, чем арифметика даты и времени. –

+0

@ Синестетика. Когда вы используете DateTimePicker, имейте в виду, что он может показать _ий_ дату _or_ time- в день, но поддерживает значение, состоящее из * обоих * ... если вы используете свойство Value, вам может потребоваться сначала вычесть тот или другой компонент. – Ian

17

Проверьте все методы DateTime здесь: http://msdn.microsoft.com/en-us/library/system.datetime.aspx

Add Возвращает новый объект DateTime, добавляющий значение указанного TimeSpan к значению данного экземпляра.

AddDays Возвращает новое значение DateTime, которое добавляет указанное количество дней к значению этого экземпляра.

AddHours Возвращает новое значение DateTime, которое добавляет указанное количество часов к значению этого экземпляра.

AddMilliseconds Возвращает новое значение DateTime, которое добавляет указанное количество миллисекунд к значению этого экземпляра.

AddMinutes Возвращает новое значение DateTime, которое добавляет указанное количество минут к значению этого экземпляра.

AddMonths Возвращает новое значение DateTime, которое добавляет указанное количество месяцев к значению этого экземпляра.

AddSeconds Возвращает новое значение DateTime, которое добавляет указанное количество секунд к значению этого экземпляра.

AddTicks Возвращает новое значение DateTime, которое добавляет указанное количество тиков к значению этого экземпляра.

AddYears Возвращает новое значение DateTime, которое добавляет указанное количество лет к значению этого экземпляра.

+0

Для всех, кто это понимает: вы можете использовать эти функции выше и использовать отрицательное значение для вычитания, если экземпляр не был инициализирован DateTime.MinValue – Kimmax

6

Используйте объект TimeSpan, чтобы захватить ваш начальный элемент времени и использовать такие методы, как AddHours или AddMinutes. Чтобы вычесть 3 часа, вы сделаете AddHours(-3).Для того, чтобы вычитать 45 минут, вы будете делать AddMinutes(-45)

+0

'Использовать объект TimeSpan для захвата вашего начального элемента времени' - вы имеете в виду 'DateTime'? – Rawling

+0

Я имею в виду System.TimeSpan type –

+1

Но начальное время - это мгновение, например. 20:00, а не в промежутке времени, например. 45 минут. (Также извиняюсь, я просто понял, сколько лет это сообщение.) – Rawling

7

Это тоже работает:

System.DateTime dTime = DateTime.Now(); 

// tSpan is 0 days, 1 hours, 30 minutes and 0 second. 
System.TimeSpan tSpan = new System.TimeSpan(0, 1, 3, 0); 

System.DateTime result = dTime + tSpan; 

вычитать год:

DateTime DateEnd = DateTime.Now; 
DateTime DateStart = DateEnd - new TimeSpan(365, 0, 0, 0); 
0

попробовать это

namespace dateandtime 
{ 

    class DatesTime 
    { 

     public static DateTime Substract(DateTime now, int hours,int minutes,int seconds) 
     { 
      TimeSpan T1 = new TimeSpan(hours, minutes, seconds); 
      return now.Subtract(T1); 
     } 


     static void Main(string[] args) 
     { 
      Console.WriteLine(Substract(DateTime.Now, 36, 0, 0).ToString()); 

     } 
    } 
}