2013-03-27 218 views
2

我有一个字符串读入,它被分隔为年,月,日,时,分,秒,毫秒。我希望能够比较两个不同的日期/时间戳。防爆。检查lhs上的小时是否大于rhs上的hr。然后继续检查月,日,时,分,秒和毫秒。到目前为止,我已经知道我正在努力做什么,只是很难将它放在一起。如果任何人有任何想法,真棒。 PS。这不是一项家庭作业,我正在构建应用程序的过程中,同时学习C++。如何在C++中使用比较运算符来比较日期和时间

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

以上是功能。

谢谢!

+2

除非你为了任何疯狂的原因改变参数,否则它们应该是'const'。 – chris 2013-03-27 14:06:55

+4

不应该返回一个'bool'吗? – Morwenn 2013-03-27 14:08:17

+0

谢谢大家的帮助!我非常感激! – Cka91405 2013-03-27 14:23:11

回答

4

使它成为一个独立的功能:

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

注意的变化:

  • 独立式,因为这个函数会将都同样的操作数,它不要么修改。
  • const参数,因为一个健全的比较实现不应该修改它的操作数。
  • return bool,因为比较理想情况下应返回bool,否?
  • friend,因为设计良好的班级通常会有这些数据成员private

该实现应该简单地按照您提到的算法对数据成员进行比较,并返回bool结果。

+0

谢谢大家的解释! – Cka91405 2013-03-27 14:26:05

1

在这种特殊情况下,您应该检查确定哪个对象“更大”的单个成员。比较时,bool作为返回类型应该是更好的,让你的论点const不会改变它们在功能:

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

一些输入见here

+0

谢谢你的帮助! – Cka91405 2013-03-27 14:25:43

+1

不客气! – 2013-03-27 14:26:16

1

如果您使用boost库,则使用date/time库。

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

+0

我不使用增强库,但如果我是你的建议,将工作谢谢! – Cka91405 2013-03-27 14:24:40

1

我会去和一帮if语句:

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

谢谢你的帮助! – Cka91405 2013-03-27 14:27:29

1

operator <应该返回一个值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,奇妙地减少代码的行数。

+1

谢谢!如果你不介意解释这将是非常感谢,std :: tie是什么意思? – Cka91405 2013-03-27 14:25:22

+1

@ Cka91405:不客气。 – deepmax 2013-03-27 14:28:57