我在这里遇到问题,我一直在尝试比较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 :(得分:2)
此:
strcpy(szdate_time, str.c_str());
if (szcurrentDate == szdate_time)
没有任何意义。您正在将C ++字符串复制到C字符串(不必要地),然后比较指向两个char数组的指针(它们将永远不会相等,因为内容不会被比较,只有地址)。
你可以这样解决:
if (szcurrentDate == str)
这将为std :: string调用operator==
,它会比较字符串内容。而且它的代码更少。
答案 1 :(得分:1)
您无法使用==来比较字符数组。这适用于字符串对象,但不适用于C样式字符串。你需要对它们使用strcmp(),你需要在日期中使用字符串对象。