2013-03-27 47 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