2013-06-25 2 views
0

Я работаю над программой, которая использует паттерны сдвига EG 7 вечера до 7 утра У меня есть следующее заявлениеDateTime После 12 вечера

SELECT MAX(Number) from LadleControl where Shift = 'Night Shift' and DateTime between @Date1 and @Date2 

Я установил время даты следующим

DateTime startDate = DateTime.Today.AddHours(19).AddMinutes(1); 
DateTime endDate = DateTime.Today.AddHours(30).AddMinutes(59); 

Проблема заключается в том когда прошло 12am DateTime.Todays` Date изменяется, а также 2 параметра Date.

Можно ли сохранить время даты на смену с 7 вечера до 7 утра без изменения в 12 часов.

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

+2

12pm? Вы имеете в виду 12am? 12:00 - обед. ;) –

+0

Извините 12am your correct – Inkey

+0

7am + 12hrs = 7pm в тот же день. 11 утра + 12 часов = 11 вечера в тот же день. 7 вечера + 12 часов = 7 утра. 11 вечера + 12 часов = 11 часов на следующий день. Я не вижу, как «прохождение 12 часов» может вызвать проблемы. – quetzalcoatl

ответ

1

Если я понял проблему правильно

var now = DateTime.UtcNow; 
DateTime startDate; 
DateTime endDate; 
if (now.Hour < 7) 
    startDate = now.Date.AddDays(-1).AddHours(19).AddMinutes(1); 
else 
    startDate = now.Date.AddHours(19).AddMinutes(1); 

endDate = startDate.AddHours(11).AddMinutes(58); 
+0

Please используйте 'DateTime.UtcNow', а не' Now'. Это быстрее, и это то, что мы должны использовать для хранения данных времени. –

+1

@ Бернхард Хофманн: Но текущий язык важен в этом случае, не так ли? Кроме того, я использовал переменную, поэтому эффективность не имеет значения. Тем не менее, отредактирован ответ на использование 'DateTime.UtcNow'. ОП может решить, что ему нужно. –

1

Если взять «Сегодня», и добавить 30 часов, вы прибудете «завтра», так что поведение является.

Возможно, вы захотите создать startDate и endDate с помощью конструктора DateTime, предоставляя год, месяц, день, час и минуты и т. Д.