2016-06-16 2 views
-1

У меня проблема сравнение время.Сравнение времени без даты?

Из того, что я исследовал, это, скорее всего, связано с тем, что у него нет даты.

Мой код, Это получает значение dateTime из базы данных.

var getDateTime = sql.Staff_Time_TBLs.Where(p => p.Staff_No == 
     SelectedEmployee.Key && p.Date_Data == day).Select(p => p.Time_Data_1).ToList(); 
DateTime dateTimeGet = Convert.ToDateTime(getDateTime); 

dateTimeGet возвращает значение, как этот "2012/12/12 15:03:00.000"

Я тогда декларировать переменные провести время.

TimeSpan startCompare = TimeSpan.Parse("15:00"); 
TimeSpan endCompare = TimeSpan.Parse("21:00"); 

Затем сравнивая значения Compare DateTime

if ((endCompare > dateTimeGet) && (startCompare < dateTimeGet)) 
    { 
     //match found 
    } 

Я получаю ошибку компиляции,

operands cannot be given to to type timespan and datetime 

Как сравнить раз в этой ситуации?

+0

[TimeSpan.Compare Метод] (https://msdn.microsoft.com/ en-us/library/system.timespan.compare (v = vs.110) .aspx) – Draken

+4

Возможно использовать 'DateTime.TimeOfDay'? Тогда вы бы сравнили два значения «TimeSpan» ... –

+1

@JonSkeet, это сделало трюк, спасибо за это. Любая идея, почему этот пост был проголосован? Я сделал все возможное, чтобы найти любой из ответов, прежде чем я разместил здесь, так как до сих пор я сам преподаю. Я купил вашу книгу пару месяцев назад, но немного продвинулся для меня, но уже нашел некоторые полезные полезные вещи, которые может использовать даже человек моего уровня. Еще раз спасибо. – KyloRen

ответ

3

Просто измените свой код так:

if ((endCompare > dateTimeGet.TimeOfDay) && (startCompare < dateTimeGet.TimeOfDay)) 
    { 
     //match found 
    } 
+0

Спасибо, это помогло. Проголосуйте за помощь. – KyloRen

2

Вы можете создать DateTime значения вместо TimeSpan для сравнения значения, используя Date своего времени дб:

DateTime startCompare = dateTimeGet.Date.AddHours(15); 
DateTime endCompare = dateTimeGet.Date.AddHours(21); 
if ((endCompare > dateTimeGet) && (startCompare < dateTimeGet)) 
{ 
    // match found 
} 

В примере, вы показали, на самом деле было бы достаточно, чтобы сравнить Hour часть из dateTimeGet:

if (dateTimeGet.Hour >= 15 && dateTimeGet.Hour <= 21) 
    // match found 
+1

УФ за то, что нашли время, чтобы помочь. Спасибо – KyloRen

3

На самом деле вы сравниваете время с датой в endCompare > dateTimeGet, так что вы получаете ошибку

операнды не может быть дано ввести отрезок времени и DateTime

Для сравнения отрезок времени вам необходимо извлечь время с даты в dateTimeGet, просто используя TimeOfDay.

if ((endCompare > dateTimeGet.TimeOfDay) && (startCompare < dateTimeGet.TimeOfDay)) 
{ 
    //match found 
} 

Это преобразует дату во времени. Для получения дополнительной информации о TimeOfDayclick here Надеюсь, это сработает для вас.

+0

по ошибке Я добавил в 'ToShortTimeString()'. Вам нужно добавить «TimeOfDay». Отредактированный мой ан, пожалуйста, проверьте его. –

+1

Спасибо, это помогло. Я поддержал помощь. – KyloRen

1

Вопрос заключается в том, что, как вы правильно говорите, вы сравниваете даты, чтобы раз

time-span является измерение времени измеряется в часах, где в качестве date-time является измерение времени измеряется в днях

так 2012/12/12 15:03:00.000 приблизительно 735248.625 days17645967 hours или , которые вы затем сравнивая с временным интервалом из 15 hours

поэтому вам нужно либо добавить 735248 days к вашему времени пролет O г падения 735248 days формирует вашу Дата

как можно легко сделать Если вы вызываете свойство времени TimeOfDay на сегодняшний день он будет игнорировать дни и просто вернуть 0.625 days в 15 hours

Это означает, что ваш код будет выглядеть следующим образом

if ((endCompare > dateTimeGet.TimeOfDay) && (startCompare < dateTimeGet.TimeOfDay))

ИЛИ

Если добавить интервал времени к т он на сегодняшний день в полночь будет создать правильное время для даты Comparation

Что означает, что ваш код будет выглядеть следующим образом

if ((dateTimeGet.Date + endCompare > dateTimeGet) && (dateTimeGet.Date + startCompare < dateTimeGet.TimeOfDay))

+1

УФ за то, что нашли время, чтобы помочь. благодаря – KyloRen

Смежные вопросы