我在比较时间方面遇到了麻烦。
根据我的研究,它很可能是因为没有约会的时间。
我的代码,
这从数据库中获取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 :(得分: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 days
或17645967 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))