DateTimePicker控件不显示上午/下午

6

我在使用自定义格式的DateTimePicker控件时遇到了问题,其中包括两个字母的A.M./P.M.缩写。

使用“en-US”CultureInfo DateTimeFormat.ShortTimePattern会得到“h:mm tt”的结果。

但是,如果使用以下代码将其设置为DateTimePicker中的自定义格式:

Dim curCul As CultureInfo = New CultureInfo("en-US")
dtpTime.Format = DateTimePickerFormat.Custom
dtpTime.CustomFormat = curCul.DateTimeFormat.ShortTimePattern

只显示小时和分钟的结果。但我还需要AM/PM部分。

示例:

上午11:04显示为11:04

下午2:00显示为2:00

附加说明: 我注意到DateTimePicker会跟踪正确的时间。 如果我增加时间(我正在使用ShowUpDown = true控件),并将小时增加12并将更改保存到数据库中,则AM / PM已更改。 因此,似乎“仅”是关于显示AM / PM部分的问题。

感谢任何帮助。 弗兰克

4个回答

13

试试这个

dtpTime.Format = DateTimePickerFormat.Custom
dtpTime.CustomFormat = "hh:mm tt"

不起作用,我不知道为什么它应该起作用...如果我检查http://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker.customformat.aspx,没有提到“aa”,所以它被简单地解释为文本并显示“aa”。 - FrankE
是的,我知道,“en-US”文化的ShortTimePattern是“h:mm tt”,如上所述。问题在于代表AM/PM的tt没有显示出来。你可以自己试试看... - FrankE
请问您能否添加您的代码?那将非常好,谢谢 :-) - FrankE
@FrankE,同样的事情,我刚刚在表单上放置了日期时间,将格式设置为自定义,在自定义格式中我给出了h:mm tt。(所有操作都在设计器中完成,它起作用了)。 - Sudhakar B
你的操作系统语言是什么?也许它能在你的电脑上工作是因为它基于英语,而我的则是基于德语,这就是为什么我需要更改文化设置。 - FrankE

3
我有同样的问题。以下是“为什么”的解释: 实际上,根据微软公司的说法:https://support2.microsoft.com/Default.aspx?scid=kb%3ben-us%3b889834&x=18&y=19日期选择器不使用当前线程文化,而是使用用户区域设置。 因此,如果您强制使用包含“tt”的日期选择器自定义格式,并且用户区域设置没有任何指示符...那么它将无法显示。

这就是解决方案!设置当前线程文化与 DateTimePicker 不兼容。根据报告和这些信息,当线程文化与 Windows 用户的区域设置匹配时,它应该可以工作。愚蠢的设计。 - ygoe

1
请确保在Windows设置中,您已正确设置时间格式以显示AM/PM。Windows中的时间格式也应设置为H:mm tt,以正确显示您的结果。

1

试一下这个:

Private Sub mainform_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Label7.Text = DateTime.Now.ToString("MMM dd yyyy  hh:mm:ss tt")
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接