Visual c++ MFC使用区域设置格式化日期
我必须以“扩展模式”打印日期,如下所示:Visual c++ MFC使用区域设置格式化日期,visual-c++,mfc,visual-studio-2005,winapi,Visual C++,Mfc,Visual Studio 2005,Winapi,我必须以“扩展模式”打印日期,如下所示: Thursday 02 August 2013 使用COleDateTime我没有问题,但我需要用本地语言打印这些东西,在我的例子中是意大利语。我在使用基本SDK命令的旧编译器中发现了以下代码: char lpDateStr[128], lpTimeStr[128]; SYSTEMTIME today; WString
Thursday 02 August 2013
使用COleDateTime我没有问题,但我需要用本地语言打印这些东西,在我的例子中是意大利语。我在使用基本SDK命令的旧编译器中发现了以下代码:
char lpDateStr[128], lpTimeStr[128];
SYSTEMTIME today;
WString str;
FileTimeToSystemTime( &IdUnicoK1, &today );
GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &today, NULL, lpDateStr, sizeof(lpDateStr) );
GetTimeFormat( LOCALE_USER_DEFAULT, TIME_FORCE24HOURFORMAT, &today, NULL, lpTimeStr, sizeof(lpTimeStr) );
str.Sprintf( "%s, %s", lpDateStr, lpTimeStr );
在MFC中,根据MSDN,为:
SYSTEMTIME stBuf;
CString strD;
CString strT;
CString strData;
FileTimeToSystemTime( &m_pK1->m_ftMyData, &stBuf );
strD = _T("dddd dd MMMM yyyy");
GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &stBuf, NULL, strD.GetBuffer(), strD.GetLength() );
strT = _T("HH':'mm':'ss");
GetTimeFormat( LOCALE_USER_DEFAULT, TIME_FORCE24HOURFORMAT, &stBuf, NULL, strT.GetBuffer(), strT.GetLength() );
strData.Format( _T("%s, %s"), strD, strT );
但这导致了以下结果:
dddd dd MMMM yyyy, HH':'mm':'ss
我哪里做错了?您没有调用
ReleaseBuffer()
,也没有将strD
和strM
初始化为足够长的时间来保存结果-因此对GetDateFormat()
的两个调用都失败
最好使用静态缓冲区:
TCHAR pszDate[200];
GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &stBuf, NULL, pszDate, 200 );
您的MFC版本在功能上并不等同于“纯C”版本 您可以使用第一个版本并将结果转换为CString,如:
CString strDateTime;
strDateTime.Format("%s, %s", lpDateStr, lpTimeStr);
否则,您将需要执行以下操作:
FileTimeToSystemTime( &m_pK1->m_ftMyData, &stBuf );
GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &stBuf, NULL, strD.GetBuffer(128), 128);
GetTimeFormat( LOCALE_USER_DEFAULT, TIME_FORCE24HOURFORMAT, &stBuf, NULL, strT.GetBuffer(128), 128);
strD.ReleseBuffer();
strT.ReleseBuffer();
strData.Format(_T("%s, %s"), strD, strT);
我接受了这个问题,因为在我看来,这可能很愚蠢,更像MFC,但两者都是正确的和可接受的。@IssamTP:足够公平了-我假设我的解决方案也有效,对吗?(我正在写一个测试程序,看看有什么问题……)