visual-c++ - 格式化长日期并将 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
。
解决方案
问题(在我的情况下是我的操作系统是英国英语。所以我必须使用语言代码en-gb
然后它显示我的日期格式字符串。
推荐阅读
- c# - Core 3.1 C# 多个 API 版本 Swagger UI 没有正确分离端点
- c - 意外导致 C 的长整数除法
- ios - 自定义单元格打破其他 MessageKit 单元格的布局
- react-native - react-navigation native-stack Stack Navigator 屏幕保持空白
- python - 如何让 tkinter 滚动条工作(灰色)
- authentication - 在tomcat自定义JNDIRealm中访问会话信息
- laravel - 如何在 Laravel Mail 上默认设置 CC/BCC
- convox - Convox Gen3 不能使用通配符子域?
- javascript - 在元素上选择 e.target.value ?
- mysql - 插件“InnoDB”初始化函数返回错误