日期时间选择器:同时选择日期和时间

161

是否可以使用DateTimePicker(Winforms)选择日期和时间(在下拉菜单中)?您如何更改所选值的自定义显示方式?此外,是否可以允许用户手动输入日期/时间?

8个回答

210

将格式设置为自定义,然后指定格式:

dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "MM/dd/yyyy hh:mm:ss";  

或者您可以按照自己的方式进行布局。您可以直接输入日期/时间。如果使用MMM,除非自己编写一些代码(例如,5代表5月),否则需要使用数字值作为输入的月份。

我不知道关于日期和时间一起选择的选择器。对我来说,这听起来像一个自定义控件。


20
24小时制时间格式:"dd MM yyyy HH mm ss"。我猜开发者需要考虑本地化(不同国家的日期/时间格式)。来自奥地利的问候。 - hfrmobile
9
@hfrmobile - 您还可以使用 System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePatternSystem.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern 来获取当前语言环境下的日期和时间格式。MSDN链接 - Wai Ha Lee
1
同意@WaiHaLee的观点:Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " " + time您还可以手动限制时间组件,例如:Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " HH:mm" - SteveCinq
1
我使用了这个,但是我将CustomFormat放在选择器属性中而不是使用代码。 - blind Skwirl

87

最好使用两个DateTimePickers来完成此工作。其中一个将是日期部分的默认选项,第二个DateTimePicker用于选择时间部分。请按照以下方式格式化第二个DateTimePicker。

      timePortionDateTimePicker.Format = DateTimePickerFormat.Time;
      timePortionDateTimePicker.ShowUpDown = true;

在你捕获它们之后,这两个控件应该是这个样子

Two Date Time Pickers

使用以下代码从这两个控件中获取日期时间

DateTime myDate = datePortionDateTimePicker.Value.Date + 
                    timePortionDateTimePicker.Value.TimeOfDay; 

要将 DateTime 分配给这两个控件,请使用以下代码

datePortionDateTimePicker.Value  = myDate.Date;  
timePortionDateTimePicker.Value  = myDate.TimeOfDay; 

2
有没有可能将分钟频率增加到30分钟?当用户点击上下按钮时? - FaizanHussainRabbani
太棒了!我创建了自定义的UserControl,以便在我的项目中多次重复使用它。 - mpasko256
谢谢您的建议。分别控制日期和时间是有道理的。 - Najeeb

46

不幸的是,这是框架中众多错误命名之一,或者最好说是SRP的违反。

要将 DateTimePicker 用于时间,请将 Format 属性设置为 Time 或 Custom(如果您想使用 CustomFormat 属性控制时间格式)。然后将 ShowUpDown 属性设置为 true。

尽管用户可以手动设置日期和时间,但他们无法使用 GUI 设置两者。


26
DateTime Picker 可以用于选择日期和时间,这就是为什么它被称为“日期和时间选择器”。您可以将“Format”属性设置为“Custom”,并设置不同格式说明符的组合,以在“Custom Format”属性中表示/选择不同格式的日期/时间。但是,如果您想更改日期,则可以使用弹出式日历,而在选择时间时(在同一控件中),您需要使用上下键来更改值。
例如,自定义格式“ ddddd,MMMM dd,yyyy hh:mm:ss tt ”将给您一个结果,如:" Thursday,August 20,2009 02:55:23 PM "。
您可以尝试不同的格式说明符组合,以满足您的需求,例如MMMM将给出“August”,而MM将给出“Aug” 。

4
"DateTime Picker" 可以用于选择日期和时间,这就是为什么它被称为 "日期和时间选择器" 的原因。但实际上它不能够做到这一点,这也是为什么会有人提出这个问题的原因。 - Derf Skren
1
实际上,这个控件非常令人沮丧。我刚刚花了一个下午调试代码,直到意识到该死的东西将返回表示用户编辑日期时间的值,但不是两者都有。我必须发泄一下:一个控件如何显示一个有效的用户编辑日期和时间(我的自定义格式是yyyy-MM-dd HH:mm),然后返回只反映显示的日期和时间的一部分的值。我会称其为错误,但它已经存在几十年了... - EBlake

21

打开Visual Studio中的dateTimePicker属性,并将Format设置为Custom。 在CustomFormat下输入您的格式。 在我的情况下,我使用了MMMMdd, yyyy | hh:mm

输入图像描述
dateTimePickerProperties


2
他并不是在询问如何格式化/显示DateTimePicker上的时间。他在询问如何使它选择一个时间(因此名称为DateTimePicker,人们会认为该控件也可用于选择一个时间)。 - nivs1978
1
这应该是正确的答案。像魔法一样运作。 - KingMak

1

你可以通过time来显示它。从那里,你可能需要两个控件(一个日期,一个时间)来完成你想要的。


1

很抱歉,DateTimePicker控件没有这些功能。它是一个相当基本(也很令人沮丧!)的控件。你最好的选择可能是找到一个第三方控件来实现你想要的功能。

对于手动输入日期和时间的选项,您可以构建一个自定义组件,使用TextBox / DateTimePicker组合来完成此操作,在无法使用第三方控件的情况下,这可能会非常有效。


0
如果你需要24小时制的时间,应该使用"HH"而不是"hh"。
"MM/dd/yyyy HH:mm"

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