DateTimePicker control does not show AM/PM

2019-06-22 07:22发布

问题:

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

回答1:

Try this

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


回答2:

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:

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


回答4:

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.