2011-12-06 3 views
2

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

2012-12-06 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; 
} 
Смежные вопросы