【问题标题】:How to compare date and time using comparison operator in c++如何在 C++ 中使用比较运算符比较日期和时间
【发布时间】:2013-03-27 14:05:29
【问题描述】:

我读入了一个字符串,它被分隔为年、月、日、小时、分钟、秒、毫秒。我希望能够比较两个不同的日期/时间戳。前任。检查 lhs 上的小时是否大于 rhs 上的小时。然后继续检查月、日、小时、分钟、秒和毫秒。到目前为止,我已经知道我正在尝试做什么,只是很难把它放在一起。如果有人有任何想法,那就太棒了。附言。这不是家庭作业,我正在构建应用程序,同时学习 c++。

ClassName operator < (ClassName &lhs, ClassName &rhs);

上面是函数。

谢谢!

【问题讨论】:

  • 除非您出于任何疯狂的原因更改参数,否则它们应该是 const
  • 这不应该返回bool吗?
  • 感谢大家的帮助!非常感谢!

标签: c++ date time


【解决方案1】:

让它成为一个独立的函数:

friend bool operator < (const ClassName &lhs, const ClassName &rhs);

注意变化:

  • 独立,因为此函数平等对待两个操作数,所以也不修改。
  • const 参数,因为合理的比较实现不应修改其操作数。
  • 返回bool,因为比较理想情况下应该返回bool,不是吗?
  • friend,因为一个设计良好的类通常会有这些数据成员private

实现应该根据您提到的算法简单地比较数据成员并返回bool 结果。

【讨论】:

  • 谢谢你的解释!
【解决方案2】:

在这种特殊情况下,您应该检查各个成员以确定哪个对象“更大”。比较时,bool 作为 return-type 应该更好,并使您的参数 const 不要在函数中更改它们:

bool operator < (const ClassName &lhs, const ClassName &rhs){
    if(lhs.hour > rhs.hour)
       return true;
    return false;
}

请参阅here 了解一些意见。

【讨论】:

    【解决方案3】:

    如果您使用的是 boost 库,请使用 date/time 库。

    否则您可以使用ctime 并将时间转换为 UNIX 时间,然后比较只是两个数字的比较。

    【讨论】:

    • 我没有使用 boost 库,但如果我是你的建议,谢谢!
    【解决方案4】:

    我会使用一堆 if 语句:

    if(lhs.year > rhs.year)
    else if(lhs.year < rhs.year)
    else
    {
        and check here for months etc.
    }
    

    【讨论】:

    • 也感谢您的帮助!
    【解决方案5】:

    operator &lt; 应该返回一个 bool 值:

     bool operator < (const ClassName &l, const ClassName &r) 
     {
       return
         std::tie(l.year, l.month, l.day, l.hour, l.minute, l.second, l.millisecond)
         <
         std::tie(r.year, r.month, r.day, r.hour, r.minute, r.second, r.millisecond);
     }
    

    你可以使用std::tie,它可以大大减少代码行数。

    【讨论】:

    • 谢谢!如果您不介意解释一下,std::tie 会做什么,非常感谢。
    猜你喜欢
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 2022-06-18
    相关资源
    最近更新 更多