【问题标题】:MFC Formatting Dates with LocaleMFC 使用区域设置格式化日期
【发布时间】:2013-08-02 22:16:10
【问题描述】:

我必须在“扩展模式”下打印一个日期,像这样:

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

我哪里做错了?

【问题讨论】:

    标签: visual-c++ mfc visual-studio-2005 winapi


    【解决方案1】:

    您没有调用ReleaseBuffer(),也没有将strD 和strM 初始化为足够长的时间来保存结果 - 所以对GetDateFormat() 的调用都失败了。

    最好使用静态缓冲区:

    TCHAR pszDate[200];
    GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &stBuf, NULL, pszDate, 200 );
    

    【讨论】:

      【解决方案2】:

      您的 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:很公平 - 我认为我的解决方案也可以,对吗? (我正在编写一个测试程序,看看它有什么问题......)
      猜你喜欢
      • 2014-12-23
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 2021-12-12
      • 2018-07-02
      • 2015-09-16
      • 1970-01-01
      相关资源
      最近更新 更多