2012-01-03 32 views
-2

当前比较“时间和分钟”如何使用C#语言如何在LINQ使用C#

在LINQ查询当前比较“时间和纪要”请任何一个知道的告诉我怎么样?

示例:这是我的时间= 08:30 使用LINQ查询 如果是返回true比较当前时间(9:30) 否则返回False; 通过磨憨 请。

+1

,并比较两次的时候是什么“是”? '=='? “不超过[x]时间”?要么...? – 2012-01-03 09:57:44

+0

你是“时间”(我会说小时),分钟是字符串或日期时间? – Reniuz 2012-01-03 10:00:45

+0

为什么选择LINQ? LINQ适用于序列,这里没有序列。 – CodesInChaos 2012-01-03 10:04:51

回答

0

你不需要LINQ查询比较的时间。

你可以简单地做

bool equal = dateTime1.Equals(dateTime2)

如果两个相同等于将有true值否则false

0

只是任何的

x.Date == DateTime.Now 

x.Date > DateTime.Now 

(DateTime.Now - x.Date).TotalMinutes > someNumber 

当心你可能需要UtcNow如果x.Date是UTC时间。

+0

是否有宽限期编辑?你的回答并不真正符合atm问题。 – CodesInChaos 2012-01-03 10:14:22

+0

@CodeInChaos我不同意; OP正在讨论比较2个日期,但并不表示*他们需要如何比较它们,因此我提出了各种选择。他们谈论比较一些价值(“我的时间”)与当前时间,这就是我所展示的。你用一种方法解释了一个**非常模糊的问题;我以另一种方式解释(并要求澄清,这被忽略) – 2012-01-03 10:16:29

0
if (DateTime.Now == myTime) 
    return true; 
else return false; 

基于以下意见:

return DateTime.Now == myTime; 
+2

aka'return DateTime.Now == myTime;' – 2012-01-03 10:01:32

+0

为什么你需要if语句?只是'返回DateTime.now == myTime;' – Reniuz 2012-01-03 10:01:44

1
DateTime now=DateTime.UtcNow;//Or .Now if you *really* want to 
return (now.Minutes==myTime.Minutes)&&(now.Hours==myTime.Hours); 

这不是LINQ,但LINQ没有任何意义在这里,因为LINQ适用于序列,并且这里没有序列。

请注意,我只评估DateTime.Now/UtcNow一次,以避免竞争条件。这样做的另一个原因是它将时钟(代表外部可变状态)与逻辑相分离,以便于测试。考虑将它作为你的函数的一个参数。

取决于myTime的时区,你需要DateTime.UtcNowDateTime.Now或更复杂的数学涉及DateTimeOffsetTimeZoneInfo


但是你的整体比较当前时间的参考时间与平等检查想法可能是有缺陷的。如果您的程序在一分钟内没有获得任何CPU时间,则不会注意到指定的时间已过。发生这种情况的一个例子是冬眠或睡眠。另一种情况是时钟突然跳跃,由于夏令时,或仅仅因为它漂移得太远,窗户联系了NTP服务器。

2

如果要比较几个小时和分钟,然后做:

public bool CompareTimes(DateTime time1, DateTime time2) 
{ 
    return time1.Hours == time2.Hours && time1.Minutes == time2.Minutes; 
} 
+0

请注意,如果你将它分解为一个方法,你不能在'基于LINQ的'IQueryable'中使用它。我也会投入一个'Contract.Requires(time1.Kind == time2.Kind)'来达到很好的效果。 – CodesInChaos 2012-01-03 10:19:22