DateTimePicker: elija tanto la fecha como la hora

143

¿Es posible usar DateTimePicker (Winforms) para elegir la fecha y la hora (en el menú desplegable)? ¿Cómo se cambia la visualización personalizada del valor seleccionado? Además, ¿es posible permitir que el usuario escriba la fecha / hora manualmente?

Grzenio
fuente

Respuestas:

187

Establezca el Formato en Personalizado y luego especifique el formato:

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

o como quieras exponerlo. Luego puede escribir directamente la fecha / hora. Si usa MMM, necesitará usar el valor numérico del mes para la entrada, a menos que escriba usted mismo algún código para eso (por ejemplo, 5 resultados en mayo)

No sé sobre el selector de fecha y hora juntos. Suena como un control personalizado para mí.

itsmatt
fuente
16
Reloj de 24 horas: "dd MM aaaa HH mm ss". Supongo que el desarrollador debe preocuparse por la localización (diferentes formatos de fecha / hora en diferentes países). Saludos desde Austria.
hfrmobile
66
@hfrmobile: también puede usar System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePatterny System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePatternobtener el formato para la cultura actual. Enlace MSDN
Wai Ha Lee
1
De acuerdo con @WaiHaLee: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " " + time También puede restringir, digamos, el componente de tiempo manualmente: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " HH:mm"
SteveCinq
Usé esto pero puse el CustomFormat en las propiedades del selector en lugar de usar el código
ciego Skwirl el
67

Lo mejor es usar dos DateTimePickers para el Job One será el predeterminado para la sección de fecha y el segundo DateTimePicker es para la parte de tiempo. Formatee el segundo DateTimePicker de la siguiente manera.

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

Los dos deberían verse así después de capturarlos

Dos recolectores de fecha y hora

Para obtener el DateTime de ambos controles, use el siguiente código

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

Para asignar el DateTime a ambos controles, use el siguiente código

datePortionDateTimePicker.Value  = myDate.Date;  
timePortionDateTimePicker.Value  = myDate.TimeOfDay; 
Vectoria
fuente
1
¿Existe la posibilidad de aumentar la frecuencia de minutos a 30 minutos? Cuando el usuario hace clic en el botón arriba o abajo?
FaizanHussainRabbani
¡Gran respuesta! Hice UserControl personalizado para reutilizarlo muchas veces en mi proyecto.
mpasko256
Gracias por la sugerencia. Tiene sentido tener dos controles diferentes para la fecha y la hora.
Najeeb
45

Desafortunadamente, este es uno de los muchos nombres incorrectos en el marco, o en el mejor de los casos, una violación de SRP.

Para usar el DateTimePicker por horas, configure la propiedad Format en Time o Custom (Use Custom si desea controlar el formato de la hora usando la propiedad CustomFormat). Luego establezca la propiedad ShowUpDown en verdadero.

Aunque un usuario puede configurar la fecha y la hora juntas manualmente, no puede usar la GUI para configurar ambas.

Nescio
fuente
24

DateTime Picker se puede utilizar para elegir la fecha y la hora, por eso se llama 'Date and Time Picker'. Puede establecer la propiedad " Formato " en " Personalizada " y establecer la combinación de diferentes especificadores de formato para representar / elegir la fecha / hora en diferentes formatos en la propiedad " Formato personalizado ". Sin embargo, si desea cambiar la Fecha, se puede usar el calendario emergente, mientras que en el caso de la selección de Hora (en el mismo control, está obligado a usar las teclas arriba / abajo para cambiar los valores.

Por ejemplo, un formato personalizado " ddddd, MMMM dd, aaaa hh: mm: ss tt " le dará un resultado como este: " jueves 20 de agosto de 2009 02:55:23 PM ".

Puede jugar con diferentes combinaciones de especificadores de formato para satisfacer sus necesidades, por ejemplo, MMMM le dará " agosto " mientras que MM le dará " agosto "

danés
fuente
"El selector de fecha y hora se puede utilizar para elegir la fecha y la hora, por eso se llama 'Selector de fecha y hora'". - excepto que no puede, por eso se hizo la pregunta.
Derf Skren
De hecho, este control es muy frustrante. Acabo de pasar una tarde depurando el código hasta que me di cuenta de que esa maldita cosa devolverá un valor que representa la fecha o la hora editada por el usuario , pero no ambas. Tengo que desahogarme: ¿cómo puede un control mostrar una fecha y hora editadas por el usuario válidas (mi formato personalizado es yyyy-MM-dd HH:mm) y luego devolver un valor que refleje solo una parte de la fecha y hora mostradas ? Lo llamaría un error, pero ha estado allí durante décadas ...
EBlake
16

Vaya a la Propertiesde su dateTimePickeren Visual Studio y configúrelo Formaten Custom. En CustomFormatingrese su formato. En mi caso uséMMMMdd, yyyy | hh:mm

ingrese la descripción de la imagen aquí
dateTimePickerProperties

Serge Voloshenko
fuente
No está preguntando cómo formatear / mostrar la hora en el DateTimePicker. Él está preguntando cómo hacer que elija una hora (de ahí el nombre DateTimePicker, uno supondría que el control también podría usarse para elegir una hora)
nivs1978
Esta debería ser la respuesta correcta. Trabajó como un encanto
KingMak
1

Puede hacer que muestre la hora . A partir de eso, probablemente tendrá que tener dos controles (una fecha, una vez) para lograr lo que desea.

Craig
fuente
1

Me temo que el control DateTimePicker no tiene la capacidad de hacer esas cosas. Es un control bastante básico (¡y frustrante!). Su mejor opción puede ser encontrar un control de terceros que haga lo que desee.

Para la opción de escribir la fecha y la hora manualmente, puede crear un componente personalizado con una combinación TextBox / DateTimePicker para lograr esto, y podría funcionar razonablemente bien, si los controles de terceros no son una opción.

Jeffrey L Whitledge
fuente