Сравните 2 даты из строк, char * или int

у меня проблема здесь, я пытался сравнить формат даты с SYSTEMTIME и дата из текстового файла (string) .Но его не работает. Я пытался изменить оба на строку (используя osstringstream),char* и int (используя sscanf) сделать сравнение, но без удачи. все довольно просто, я хочу получить текущую системную дату и сравнить ее с датой из текстового файла. Ниже мой код:

char szcurrentDate[MAX_PATH] = "";
char szdate_time[MAX_PATH];
SYSTEMTIME st;
GetLocalTime(&st);
GetDateFormat(LOCALE_USER_DEFAULT, NULL, &st, "yyyy-M-d ", szcurrentDate,
MAX_PATH);  // current system date
// std::ostringstream mm;
// stringstream mm;
// mm << szcurrentDate;
MessageBoxA(NULL, szcurrentDate, "Attention", IDOK == IDCANCEL);
ifstream ifs(szFile);
string line;
while (!ifs.eof())
{
getline(ifs, line);
if ((line.find("TESTING_GET_DATE:") != string::npos))
{
std::string str = line.substr(
17, 9);  // substract TESTING_GET_DATE: 2014-3-16 to  2014-3-16
strcpy(szdate_time, str.c_str());
if (szcurrentDate == szdate_time)
{
MessageBoxA(NULL, "Same", "Attention", MB_OK);
}
else
{
MessageBoxA(NULL, "blablabla", "Attention", MB_OK);
}

примечание: я попытался отобразить только szcurrentDate а также szdate_time они показывают дату точно так же. в string,char* или же int форматы.

0

Решение

Это:

strcpy(szdate_time, str.c_str());
if (szcurrentDate == szdate_time)

Не имеет смысла. Вы копируете строку C ++ в строку C (без необходимости), а затем сравниваете указатели с двумя массивами символов (которые никогда не будут равны, так как содержимое не сравнивается, только адреса).

Вы можете исправить это так:

if (szcurrentDate == str)

Это будет ссылаться operator== для std :: string, которая сравнивает содержимое строки. И это меньше кода.

2

Другие решения

Вы не можете сравнивать массивы символов, используя ==. Это работает для строковых объектов, но не для строк в стиле C. Вам нужно использовать strcmp () для них, вам нужно использовать строковые объекты для дат.

1