首页 > 解决方案 > 格式化长日期并将 GetLocaleInfoEx 与 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说:

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

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

更新

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

在此处输入图像描述

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

标签: visual-c++mfc

解决方案


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


推荐阅读