在 LOCALE_SLONGDATE 中格式化长日期和使用 GetLocaleInfoEx 时出现问题

Problem formatting long dates and using GetLocaleInfoEx with LOCALE_SLONGDATE

我在这里感到困惑。根据我的 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 的文档,它说:

Long date formatting string for the locale. The maximum number of characters allowed for this string is 80, including a terminating null character. The string can consist of a combination of day, month, year, and era format pictures and any string of characters enclosed in single quotes. Characters in single quotes remain as specified. For example, the Spanish (Spain) long date is "dddd, dd' de 'MMMM' de 'yyyy". Locales can define multiple long date formats.

我要说明一下第一个参数的值是en.

更新

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

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

问题(在我的例子中,我的操作系统是英国英语。所以我不得不使用 en-gb 的语言代码,然后它显示我的日期格式字符串。