比较没有约会的时间?

时间:2016-06-16 11:17:24

标签: c#

我在比较时间方面遇到了麻烦。

根据我的研究,它很可能是因为没有约会的时间。

我的代码, 这从数据库中获取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

如何在这种情况下比较时间?

4 个答案:

答案 0 :(得分:4)

只需编辑您的代码:

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

答案 1 :(得分:3)

实际上,您正在endCompare > dateTimeGet中将时间与日期进行比较,因此您收到了错误

  

无法赋予操作数输入timepan和datetime

通过简单地使用dateTimeGet来比较您需要从TimeOfDay中提取日期所需的时间跨度。

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

这会将日期转换为时间。有关TimeOfDay click here希望的详细信息,希望这对您有用。

答案 2 :(得分:2)

您可以使用数据库时间的DateTime来创建TimeSpan值而不是Date来比较值:

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

在您展示的示例中,实际上足以比较Hour的{​​{1}}部分:

dateTimeGet

答案 3 :(得分:1)

问题是,正如你正确地说,你正在比较日期和时间

time-span是以小时为单位测量的时间,其中date-time是以天为单位测量的时间

因此2012/12/12 15:03:00.000约为735248.625 days17645967 hours 然后将其与15 hours

的时间跨度进行比较

因此您需要在时间范围内添加735248 days或从您的日期中删除735248 days

两者都可以轻松完成 如果您在日期调用时间TimeOfDay属性,则会忽略这些日期,只需将0.625 days作为15 hours

返回

这意味着您的代码看起来像这样

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

OR

如果您将时间跨度添加到午夜日期,则会为比较创建正确的日期时间

这意味着您的代码看起来像这样

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