Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较没有日期的时间?_C# - Fatal编程技术网

C# 比较没有日期的时间?

C# 比较没有日期的时间?,c#,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 = Conve

我很难比较时间

从我的研究来看,这很可能是因为没有约会的时间

我的代码, 这将从数据库中获取一个
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");
然后比较这些值


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

您可以创建
日期时间
值,而不是
时间跨度
来比较值,使用数据库时间的
日期

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

只需按如下方式编辑代码:

if ((endCompare > dateTimeGet.TimeOfDay) && (startCompare < dateTimeGet.TimeOfDay))
     {
        //match found
     }
if((endCompare>dateTimeGet.TimeOfDay)和&(startCompare
实际上,您正在
endCompare>dateTimeGet
中比较时间和日期,因此您得到了错误

无法将操作数指定给timespan和datetime类型

要比较时间跨度,只需使用
TimeOfDay
即可从
dateTimeGet
中的日期提取时间

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

这将把日期转换成时间。有关每日时间的更多详细信息,请参见
,希望这对您有用。

问题在于,正如您正确地说的,您正在比较日期和时间

时间跨度
是以小时为单位测量的时间,其中日期时间是以天为单位测量的时间

因此
2012/12/12 15:03:00.000
大约是
735248.625天
17645967小时
然后将其与
15小时的时间跨度进行比较

因此,您需要在您的时间跨度中添加
735248天
,或者从日期中删除
735248天

两者都很容易做到 如果在日期调用time
TimeOfDay
属性,它将忽略天数,只返回
0.625天
as
15小时

这意味着您的代码将如下所示

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

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

这意味着您的代码将如下所示


if((dateTimeGet.Date+endCompare>dateTimeGet)和&(dateTimeGet.Date+startCompare

也许可以使用
DateTime.TimeOfDay
?然后你会比较两个
TimeSpan
值…@JonSkeet,这就成功了,谢谢你。你知道为什么这篇文章会被否决吗?我尽了我最大的努力找到任何答案之前,我张贴在这里,因为我自学至今。几个月前我买了你的书,对我来说还是有点先进,但已经找到了一些非常有用的东西,即使是我这样的人也可以使用。再次感谢。@KyloRen这可能只是因为格式的原因,你提出问题的方式有点难理解read@MikeT,对不起,我不知道该怎么说。谢谢你的提醒。我错把它添加到了
toSortTimeString()
。您需要添加“TimeOfDay”。编辑了我的ans,请检查it.UV以获取帮助。感谢SUV花时间提供帮助。谢谢
if (dateTimeGet.Hour >= 15 && dateTimeGet.Hour <= 21)
    // match found
if ((endCompare > dateTimeGet.TimeOfDay) && (startCompare < dateTimeGet.TimeOfDay))
     {
        //match found
     }
if ((endCompare > dateTimeGet.TimeOfDay) && (startCompare < dateTimeGet.TimeOfDay))
 {
    //match found
 }