2011-12-06 146 views
2

我需要比較2個字符串日期以查看一個日期是否晚於另一個日期。這兩個日期的日期格式在底部。我可以重新排列這個以至於最簡單的東西。我有提升,但它不一定非得通過這麼多的例子,似乎無法繞過我的腦力來實現它的工作。在此先感謝基本上我想C++與字符串日期比較

2012年12月6日14時28分51秒

if (date1 < date2) { 
// do this 
} 
else { 
// do that 
} 

回答

2

它看起來像您使用的日期格式已經在字典順序和標準的字符串比較會工作,是這樣的:

std::string date1 = "2012-12-06 14:28:51"; 
std::string date2 = "2012-12-06 14:28:52"; 
if (date1 < date2) { 
    // ... 
} 
else { 
    // ... 
} 

您需要確保空格和標點符號使用這個時候是一致的格式,特別是類似2012-12-06 9:28:51將打破比較。 2012-12-06 09:28:51將工作。

+0

謝謝你不知道這對我來說就是那麼簡單 – user1054513

+0

它只是使一般的編程語言將日期轉換爲整數然後比較整數更有意義;比較「按照字典順序排列」的內容只是開發人員的錯誤傾向。 –

4

你很幸運 - 您的日期已經在做一個標準的字符串比較正確的格式並獲得正確的結果。所有部分從最重要到最不重要,並且您使用的是24小時制。

如果這些是std::string s,您可以使用<,正如您在樣本中所示。如果它們是C風格的字符數組字符串,請使用strcmp

+1

只要他們是UTC。或者更一般地說,是同一個時區。 – smparkes

+1

你會是對的,當且僅當小於10的小時零填充,例如。 01:00:00 <02:00:00,但1:00:00> 02:00:00。 @Seth Carnegie真的是這樣嗎? – fronsacqc

+0

其如此簡單,謝謝 – user1054513

0

strcmp()返回指示該字符串之間的關係的積分值:

result = strcmp(string1, string2); 
if(result > 0) strcpy(tmp, "greater than"); 
else if(result < 0) strcpy(tmp, "less than"); 

零值表示這兩個字符串相等。 大於零的值表示不匹配的第一個字符在str1中比在str2中有更大的值;而小於零的值表示相反。

#include <string.h> 
#include <stdio.h> 

char string1[] = "2012-12-06 14:28:51"; 
char string2[] = "2011-12-06 14:28:51"; 

int main(void) 
{ 
    char tmp[20]; 
    int result; 

    printf("Compare strings:\n %s\n %s\n\n\n", string1, string2); 
    result = strcmp(string1, string2); 

    if(result > 0)  strcpy(tmp, "greater than"); 
    else if(result < 0) strcpy(tmp, "less than"); 
    else strcpy(tmp, "equal to"); 

    printf(" strcmp: String 1 is %s string 2\n\n", tmp); 

    return 0; 
}