2011-12-06 59 views
2

2つの文字列の日付を比較して、ある日付が後であるかどうかを調べる必要があります。両方の日付の日付形式は一番下にあります。私はこれが今までに最も簡単なもののためにこれを並べ替えることができます。私は後押ししているが、そうである必要はありません。多くの例があり、脳を包み込んで働かせるように見えません。あなたの日付は、標準の文字列比較を行うために適切な形式に既にある - 事前のおかげでは、基本的には、私はあなたが幸運C++は文字列の日付と比較する

2012年12月6日午後02時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

それはちょうど整数に日付を変換し、次に整数を比較するprog言語の一般的にもっと意味があります。 「辞書編集的に」あるものを比較することは、開発者の間違いの可能性が高いだけです。 –

4

をしたいです正しい結果を得ることができます。すべての部品が最も重要なものから最も重要なものに変わり、24時間制を使用しています。

std::stringの場合は、サンプルと同じように<を使用できます。 Cスタイルの文字配列文字列の場合は、strcmpを使用します。

+1

UTCである限り。または、より一般的には、同じタイムゾーン。 – smparkes

+1

10より小さい時間が0で埋められている場合、あなたが正しいでしょう。 01:00:00 <02:00:00、ただし1:00:00> 02:00:00。 @セスカーネギー本当にそうですか? – fronsacqc

+0

それはとてもシンプルです、ありがとう – user1054513

0

strcmp()は、文字列間の関係を表す整数値を返す:

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

ゼロ値は、両方の文字列が同じであることを示しています。 0より大きい値は、一致しない最初の文字がstr1よりもstr1の方が大きいことを示します。そして、ゼロより小さい値は反対を示す。

#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; 
} 
関連する問題