C ++ сравнить со строковыми датами - PullRequest
2 голосов
/ 07 декабря 2011

Мне нужно сравнить 2 строковые даты, чтобы увидеть, если одна дата позже, чем другая.Формат даты для обеих дат находится внизу.Я могу изменить это для того, что когда-либо легче всего.У меня есть импульс, но это не обязательно, я прошел через очень много примеров и, похоже, не могу заставить свой мозг работать.Заранее спасибо, в основном я хочу

2012-12-06 14: 28: 51

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

Ответы [ 3 ]

5 голосов
/ 07 декабря 2011

Похоже, формат даты, который вы используете, уже в лексикографическом порядке, и будет работать стандартное сравнение строк, что-то вроде:

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 будет работать, хотя.

4 голосов
/ 07 декабря 2011

Вам повезло - ваши даты уже в правильном формате для стандартного сравнения строк и получения правильных результатов.Все части переходят от наиболее значимых к наименее значимым, и вы используете 24-часовое время.

Если это std::string с, вы можете использовать < точно так же, как в своем образце.Если это строки массива символов в стиле C, используйте strcmp.

0 голосов
/ 07 декабря 2011

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...