【问题标题】:Problem formatting long dates and using GetLocaleInfoEx with LOCALE_SLONGDATE格式化长日期和将 GetLocaleInfoEx 与 LOCALE_SLONGDATE 一起使用时出现问题
【发布时间】:2020-11-06 09:34:43
【问题描述】:

我在这里感到困惑。根据我的 Windows 10 区域设置,长日期格式为:

我正在调整一些 MFC 代码:

strDate = CFormatUtility::FormatAsLongDate(datToFormat);

所以上面调用了这个方法:

CString CFormatUtility::FormatAsLongDate(COleDateTime datDate)
{
    CString strFormattedText;

    TRY
    {
        TCHAR szDateFormatString[_MAX_PATH];
        GetLocaleInfoEx(theApp.GetHtmlLanguageCode(),
            LOCALE_SLONGDATE, szDateFormatString, _MAX_PATH);

        strFormattedText = FormatAsCustomDate(datDate, szDateFormatString);
    }
    CATCH(CException, Except)
    {

    }
    END_CATCH

    return strFormattedText;
}

后面的方法就不给大家展示了,因为问题出在这里:

    TCHAR szDateFormatString[_MAX_PATH];
    GetLocaleInfoEx(theApp.GetHtmlLanguageCode(),
        LOCALE_SLONGDATE, szDateFormatString, _MAX_PATH);

根据高级 Windows 设置:

然而当我使用上面的代码时:

如您所见,格式字符串是dddd, MMMM d, yyyy,这是不对的。

根据LOCALE_SLONGDATE 的文档,它说:

语言环境的长日期格式字符串。此字符串允许的最大字符数为 80,包括终止空字符。该字符串可以由日、月、年和纪元格式图片的组合以及用单引号括起来的任何字符串组成。单引号中的字符保持原样。例如,西班牙语(西班牙)长日期是“dddd, dd' de 'MMMM' de 'yyyy”。语言环境可以定义多种长日期格式。

我应该澄清一下,第一个参数的值是en

更新

我在我的区域设置中看到有几种类型的长日期:

但是这个练习的重点是我获得了区域设置使用的格式字符串。而且它没有返回那个字符串dd MMMM yyyy

【问题讨论】:

    标签: visual-c++ mfc


    【解决方案1】:

    问题(在我的情况下,我的操作系统是英国英语。所以我必须使用en-gb 的语言代码,然后它会显示我的日期格式字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2023-04-09
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      相关资源
      最近更新 更多