1

我正在使用以下代码将 Time Picker 控件的格式(使用 Win32 类名SysDateTimePick32)设置为仅以美国英语格式显示时间:

LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT));
TCHAR buffFmt[200] = {0};
GetLocaleInfo(lcid, LOCALE_STIMEFORMAT, buffFmt, SIZEOF(buffFmt));

TRACE(buffFmt);    //"h:mm:ss tt"

::SendMessage(m_hWnd, DTM_SETFORMAT, 0, (LPARAM)buffFmt);

当我在为美国英语用户帐户设置的 Windows 7 上运行它时,控件看起来不错,如下所示:

在此处输入图像描述

但是,如果我在 Windows 7 上运行它,并且用户帐户设置为德语格式:

在此处输入图像描述

控件看起来像这样(缺少 AM/PM 部分):

在此处输入图像描述

请注意,在这两种情况下,格式字符串都是“h:mm:ss tt”,根据此页面,这意味着tt应该代表 AM/PM 部分。

知道如何解决这个问题吗?

4

1 回答 1

2

从“区域和语言”控制面板对话框中,单击“其他设置”按钮,然后单击“时间”选项卡。AM 符号和 PM 符号的设置是什么?

在我的 Windows 7 机器上,格式设置为德语,这些都是空字符串。datetime 控件从用户的当前语言环境中获取要显示的字符串,因此即使您强制它以格式字符串显示 AM/PM,它实际上也不会为此部分显示任何内容。

于 2013-06-08T22:44:22.747 回答