у меня проблема здесь, я пытался сравнить формат даты с 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 () для них, вам нужно использовать строковые объекты для дат.