У меня проблема, я пытаюсь сравнить формат даты с 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
.
Эта:
strcpy(szdate_time, str.c_str());
if (szcurrentDate == szdate_time)
Без разницы. Вы копируете строку C++ в строку C (необязательно), а затем сравниваете указатели на два массива символов (которые никогда не будут равны, так как содержимое не сравнивается, только адреса).
Вы можете исправить это следующим образом:
if (szcurrentDate == str)
Это вызовет operator==
для std :: string, который сравнивает содержимое строки. И это меньше кода.
Вы не можете сравнивать массивы символов, используя ==. Это работает для строковых объектов, но не для строк стиля C. Вам нужно использовать strcmp() для них, вам нужно использовать строковые объекты для дат.