【问题标题】:How to compare two different time values如何比较两个不同的时间值
【发布时间】:2013-11-13 00:50:40
【问题描述】:

我想检查系统时间是否为特定值。比如时间是否是上午 11:15,或者如果时间晚于上午 11:00,我可以使用。

我尝试使用

   CTime CurrentTime = CTime::GetCurrentTime();

但不知道如何比较。

谢谢

【问题讨论】:

标签: c++ visual-studio-2010 visual-c++ time mfc


【解决方案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:00 的时间,至少要回答你的问题

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

【讨论】:

  • 不一定是跨度,而是 BEFORE that time 到 AFTER that time 的事件。即使您有 1 秒的“epsilon”,您仍然有可能在这段时间内被分配到处理器之外(例如,等待软盘上的 I/O 操作)。没有“epsilon”值保证足够大,所以只需检测从“之前”标记到“之后”的过渡。
  • 谢谢@Martin,这是 24 小时制还是我应该分别检查上午/下午?
  • @franji1 你完全正确,我为此添加了一个示例。我试图坚持接近这个问题。
  • @user2937812,现在是 24 小时。
【解决方案2】:

我更喜欢 COleDateTime。时间以双精度表示。 完整的数字代表从什么时候开始的天数。分数代表一天中的时间,所以 0.5 ist noon 0.75 是 6pm...

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

【讨论】:

    猜你喜欢
    • 2018-08-20
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多