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

0

У меня проблема, я пытаюсь сравнить формат даты с 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.

Теги:
string

2 ответа

2
Лучший ответ

Эта:

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

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

Вы можете исправить это следующим образом:

if (szcurrentDate == str)

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

  • 0
    спасибо Джон, он вызывает оператор ==, но как мне сравнить содержимое даты?
  • 0
    Я не понимаю, о чем ты сейчас спрашиваешь.
Показать ещё 6 комментариев
1

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

  • 0
    Привет, Гейб, да, я попытался использовать strcmp, выполнив это: std :: string str1 = szcurrentDate; std :: string str2 = szdate_time; strcmp (szcurrentDate, szdate_time) == 0), но не работает, я преобразовал их в строку и сравнил.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню