0

我有时间char[]格式,但我需要将其转换为CString. 这是我所拥有的,但它不起作用:

GetSystemTime(&t);
char time[60] = "";
char y[20],mon[20],d[20],h[20],min[20],s[20];

sprintf(y, "%d", t.wYear);
sprintf(d, "%d", t.wDay);
sprintf(mon, "%d", t.wMonth);
sprintf(h, "%d", t.wHour+5);
sprintf(min, "%d", t.wMinute);
sprintf(s, "%d", t.wSecond);

strcat(time,d);
strcat(time,"/");
strcat(time, mon);
strcat(time,"/");
strcat(time, y);
strcat(time," ");
strcat(time,h);
strcat(time,":");
strcat(time, min);
strcat(time,":");
strcat(time, s);

CString m_strFileName = time;

任何帮助..:(?

4

2 回答 2

1

如果您有文件扩展名,那么最好的放置位置是在格式化日期字符串时的 sprintf/CString::Format 调用中。此外,通常在格式化文件名的日期时,会以相反的顺序 yyyy/mm/dd 完成,以便在 Windows 资源管理器中正确排序。

1 在我进入一些代码之前的最后一件事:Windows 中的文件名存在无效字符,其中既有斜杠字符 [EDIT] 也有冒号字符 [/EDIT]。通常使用点或破折号代替文件名。我的解决方案使用您使用的斜杠和日期格式,与您的代码保持一致,但如果您将斜杠用于文件名,您应该至少更改斜杠。

让我为您提供一些解决方案:

1:与您所拥有的类似:

char time[60];
sprintf(time, "%u/%u/%u %u:%u:%u", t.wDay, t.wMonth, t.wYear, t.wHour + 5, t.wMinute, t.wSecond);
CString m_strFileName(time); //This uses the CString::CString(const char *) constructor
//Note: If m_strFileName is a member variable of a class (as the m_ suggests), then you should use the = operator and not the variable declaration like this:
m_strFileName = time; //This variable is already defined in the class definition

2:使用CString::Format

CString m_strFileName; //Note: This is only needed if m_strFileName is not a member variable of a class
m_strFileName.Format("%u/%u/%u %u:%u:%u", t.wDay, t.wMonth, t.wYear, t.wHour + 5, t.wMinute, t.wSecond);

3:你为什么使用 CString?

如果不是类的成员变量,则不需要使用CString,直接使用时间即可。

char time[60];
sprintf(time, "%u/%u/%u %u:%u:%u", t.wDay, t.wMonth, t.wYear, t.wHour + 5, t.wMinute, t.wSecond);
FILE *pFile = fopen(time, "w");
//or...
HANDLE hFile = CreateFile(time, ...);

更新:回答您的第一条评论:

NO CString::GetBuffer用于获取可以写入的 CString 的可变缓冲区,通常作为 sprintf、GetModuleFilename、...函数的缓冲区。

如果您只想读取字符串的值,请像这样使用强制转换运算符:

CString str("hello");
printf("%s\n", (LPCSTR)str); //The cast operator here gets a read-only value of the string
于 2013-05-31T07:56:41.907 回答
0

您可以使用 std::ostringstream 和 std::string 将时间转换为字符串。像这样的东西。我已经展示了几秒钟,你可以做几小时、几分钟等。

int seconds;
std::ostringstream sec_strm;
sec_strm << seconds;
std::string sec_str(sec_strm.c_str());
于 2013-05-31T07:56:39.403 回答