2013-11-01 102 views
0

我要检查,如果系统时间为特定值。如果时间是早上11:15,或者如果时间晚于上午11:00,我可以使用。如何比较两个不同的时间值

我试图用

CTime CurrentTime = CTime::GetCurrentTime(); 

但无法弄清楚如何进行比较。

感谢

+0

的CTime具有比较运营商。 http://msdn.microsoft.com/en-us/library/fww7f4h3%28v=vs.90%29.aspx – drescherjm

+0

@drescherjm感谢,我看到了,但我怎么能解释,如果时间是上午11点?那么我想我可以比较当前时间和上午11点。 – user2937812

回答

1

使用一个额外的CTime对象(Here):

CTime CurrentTime=CTime::GetCurrentTime(); 

if(CurrentTime==CTime(2013,11,1,20,15,00)) 
{ 
    // Do that... 
    Sleep(0); 
} 

但它始终是更安全的进行比较的时间跨度:

if((CurrentTime>CTime(2013,11,1,20,15,00))&&(CurrentTime<CTime(2013,11,1,20,15,05))) 
{ 
    // Do that... 
    Sleep(0); 
} 

在这种情况下,我参加了一个跨度5秒。通常情况下,你永远不会碰到确切的时间,所以第二个例子更安全。

而且至少,回答你的问题,如果你想知道它的过去11

if(CurrentTime>CTime(CurrentTime.GetYear(),CurrentTime.GetMonth(),CurrentTime.GetDay(),11,00,00)) 
{ 
    // Uhh yeah, past 11:00 
} 
+0

不一定是一个跨度,但是那个时候到那个时间之前的事件。即使你有1秒的“epsilon”,仍然有机会在这段时间内处理掉处理器(例如等待软盘上的I/O操作)。没有“epsilon”值保证足够大,因此只需检测从“之前”标记到“之后”的转换。 – franji1

+0

谢谢@Martin,是这种24小时格式还是应该单独检查am/pm? – user2937812

+0

@ franji1你是完全正确的,我添加了一个样本。我试图贴近问题。 –

0

我喜欢的COleDateTime。时间表示为双倍。 完整的数字代表了自那以来的日子。分数代表了一天的时间,所以0.5北京时间中午0.75是下午6点...

便于计算和易于比较。还有一个COleDateTimeSpan辅助类。