带有LOCALE_SSHORTDATE的GetDateFormat返回非本地化的数字

时间:2012-09-25 22:24:45

标签: winapi localization

我正在运行Windows 7 +外语包。 (我已将默认语言环境设置为外语)我有一个有效的SYSTEMTIME结构,我正在尝试从中构建一个本地化的日期/时间。

这是我获取格式字符串然后尝试获取本地化日期的方式

WCHAR pFmt[MAX_SIZE] = {0};
int localeinfo=GetLocaleInfo(localeID, LOCALE_SSHORTDATE, pFmt, sizeof(pFmt)/sizeof(TCHAR));

我已经尝试了以下所有

GetDateFormat(LOCALE_USER_DEFAULT, 0, &st, pFmt, formattedString, MAX_PATH);
GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, &st, pFmt, formattedString, MAX_PATH);
GetDateFormat(localeinfo, 0, &st, pFmt, formattedString, MAX_PATH);

带有数字的字符串未被本地化 - 在所有情况下,我总是将formattedstring变为

pFmt            "dd/MM/yyyy"
formattedString "25/09/2012"      (I want this to be in the foreign language)

如何让格式化字符串具有数字的本地化值?

1 个答案:

答案 0 :(得分:2)

如果希望GetDateFormat使用与任何语言环境对应的格式,则应将其命名为,而不使用格式字符串(第4个参数设置为NULL)。

例如,在调用之后尝试比较formattedString:

LCID lcidEnUs = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT);
GetDateFormat(lcidEnUs, 0, &st, NULL, formattedString, MAX_PATH);

而且:

LCID lcidFrFr = MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), SORT_DEFAULT);
GetDateFormat(lcidFrFr, 0, &st, NULL, formattedString, MAX_PATH);