C 获得保证具有完整(4位)年份号的地区缩短日期的正确方法是什么?
我想创建一个日期时间选择器控件,将日期和时间显示为C 获得保证具有完整(4位)年份号的地区缩短日期的正确方法是什么?,c,winapi,locale,C,Winapi,Locale,我想创建一个日期时间选择器控件,将日期和时间显示为DTS\u SHORTDATECENTURYFORMAT和DTS\u TIMEFORMAT样式的组合。由于日期时间选择器中没有内置这样的样式,因此我必须使用getLocaleInfo()自己完成 我注意到默认情况下,getLocaleInfo(LOCALE\u SSHORTDATE)似乎返回四位数的年份,这正是我想要的。这可靠吗?任何地方都没有文档记录,只是LOCALE\u SSHORTDATE可以有多个字符串。如果我必须列举可能的字符串,我怎么
DTS\u SHORTDATECENTURYFORMAT
和DTS\u TIMEFORMAT
样式的组合。由于日期时间选择器中没有内置这样的样式,因此我必须使用getLocaleInfo()
自己完成
我注意到默认情况下,getLocaleInfo(LOCALE\u SSHORTDATE)
似乎返回四位数的年份,这正是我想要的。这可靠吗?任何地方都没有文档记录,只是LOCALE\u SSHORTDATE
可以有多个字符串。如果我必须列举可能的字符串,我怎么知道哪一个是我想要的?我是否只查找包含yyyy
的第一个字符串?这听起来不可靠,至少它本身不可靠
谢谢。不,您不能依赖于
区域设置\u SSHORTDATE
具有四位数的年份,因为用户可以通过区域控制面板进行配置,并且有两位数年份的选项可用
如果您想要强制执行四位数的年份(并覆盖用户的首选项),您也可以只提供自己的短日期字符串。或者,您可以扫描用户的字符串并将“yy”更改为“yyy”。您还可以将
GetDateFormat
和GetTimeFormat
与LOCALE\u SSHORTDATE
等组合使用
wchar_t buf[100];
SYSTEMTIME st;
GetSystemTime(&st);
GetDateFormat(0, DATE_LONGDATE, &st, 0, buf, 100);
GetDateFormat(0, DATE_SHORTDATE, &st, 0, buf, 100);
GetTimeFormat(0, 0, &st, 0, buf, 100);
GetTimeFormat(0, TIME_NOSECONDS, &st, 0, buf, 100);
那么也许你不必担心格式化是如何完成的。即使对于长日期格式,年份有时也设置为
yy
。例如,在控制面板->区域->格式:切换到法语,它允许不同于美国英语的选项。在这种情况下,我想知道为什么会出现DTS\u SHORTDATECENTURYFORMAT
。。。如果这是这里提供的最佳选项,我可能会保留当前拥有的内容(以GetLocaleInfoEx()
返回的默认短日期字符串为准)。同时谢谢。我想我将把yy
改为yyy
选项,因为这似乎是标准控件对DTS\u SHORTDATECENTURYFORMAT
所做的。:/。谢谢