1

我必须在“扩展模式”中打印出一个日期,如下所示:

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

我在哪里做错了?

4

2 回答 2

2

You are not calling ReleaseBuffer(), nor initializing the strD and strM to something long enough to hold the result - so both calls to GetDateFormat() fail.

It is better to use static buffers:

TCHAR pszDate[200];
GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &stBuf, NULL, pszDate, 200 );
于 2013-08-02T14:07:54.703 回答
1

您的 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);
于 2013-08-02T14:16:10.517 回答