DateTimePicker control does not show AM/PM

2019-06-22 07:11发布

I'm having a problem with a DateTimePicker control using a custom format which includes the the two-letter A.M./P.M. abbreviation.

Using an "en-US" CultureInfo DateTimeFormat.ShortTimePattern results in "h:mm tt".

But setting this as custom format in a DateTimePicker with the following code:

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

results in only the hour and the minutes being displayed. I however also need the AM/PM part.

Examples:

11:04 AM is displayed as 11:04

2:00 PM is displayed as 2:00

Additional remark: I noticed that the DateTimePicker keeps track of the correct time. If I increase the time (I'm using ShowUpDown = true for this DateTimePicker control) and increase the hour by 12 and save the changes into the database, the AM/PM has changed. So it seems "only" to be an issue about displaying the AM/PM part.

Thanks for any help. Frank

4条回答
唯我独甜
2楼-- · 2019-06-22 07:40

I have the same issue. This for the "Why" : Actually according to MS : https://support2.microsoft.com/Default.aspx?scid=kb%3ben-us%3b889834&x=18&y=19 Date picker don't use the current thread culture : it uses the user regional settings. SO if you force the date picker custom format something containing "tt", and if the user regional setting doesnt have any designator ... well it won't be shown.

查看更多
叼着烟拽天下
3楼-- · 2019-06-22 07:50

Make sure that in Windows settings you also have set time format properly to display AM/PM. Time format in Windows should be also set to H:mm tt to display your result properly.

查看更多
三岁会撩人
4楼-- · 2019-06-22 07:58

Try this

dtpTime.Format = DateTimePickerFormat.Custom
dtpTime.CustomFormat = "hh:mm tt"
查看更多
三岁会撩人
5楼-- · 2019-06-22 07:58

try this:

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
查看更多
登录 后发表回答