2008-09-18 41 views
124

¿Es posible utilizar DateTimePicker (Winforms) para elegir tanto la fecha como la hora (en el menú desplegable)? ¿Cómo se cambia la visualización personalizada del valor elegido? Además, ¿es posible habilitar al usuario para que escriba la fecha/hora manualmente?DateTimePicker: elegir fecha y hora

Respuesta

161

Ajuste el formato de encargo y luego especificar el formato:

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

o como le quieran ponerlo hacia fuera. 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 algún código para eso (por ejemplo, 5 resultados en mayo)

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

+1

muchas gracias! me salvó a lo grande – rlee923

+12

reloj de 24 horas: "dd MM aaaa HH mm ss". Supongo que el desarrollador debe preocuparse por la localización (diferente formato de fecha/hora en diferentes países). Saludos desde Austria. – hfrmobile

+4

@hfrmobile - también puede usar 'System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern' y' System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern' para obtener el formato de la cultura actual. [Enlace MSDN] (https://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo) –

41

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 utilizar el DateTimePicker para los tiempos, establezca la propiedad Formato a cualquiera hora o Personalizado (Uso personalizado si desea controlar el formato de la hora usando la propiedad CustomFormat). A continuación, establezca la propiedad ShowUpDown en verdadero.

Aunque un usuario puede establecer la fecha y la hora juntas de forma manual, no pueden usar la GUI para establecer ambas.

+0

+1 Gracias por los consejos. Esto es lo que estoy buscando. –

1

Se puede obtener que muestre time. De eso, probablemente tendrá que tener dos controles (una fecha, una vez) para lograr lo que desea.

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 quiera.

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.

19

DateTime Picker se puede utilizar para elegir tanto la fecha como la hora, por eso se llama 'Selector de fecha y hora'. Puede establecer la propiedad "Format" en "Custom" y establecer la combinación de diferentes especificadores de formato para representar/elegir la fecha/hora en diferentes formatos en la propiedad "Custom Format". Sin embargo, si desea cambiar la fecha, se puede usar el calendario emergente, mientras que en el caso de la selección de tiempo (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 2:55:23 PM"

se puede jugar con diferentes combinaciones de especificadores de formato para satisfacer su necesidad, por ejemplo, MMMM dará "agosto", mientras que MM dar "agosto"

+0

"DateTime Picker se puede utilizar para elegir tanto la fecha como la hora, por eso se llama 'Date and Time Picker'." - excepto que no puede, por lo que se hizo la pregunta. –

+0

De hecho, este control es muy frustrante. Acabo de pasar un código de depuración de la tarde hasta que me di cuenta de que la maldita cosa devolverá un valor que representa la fecha editada por el usuario ** O ** hora, pero no ambas. Debo ventilar: ¿cómo puede un control mostrar una fecha y hora válidas editadas por el usuario (mi formato personalizado es 'aaaa-MM-dd HH: mm') y luego devolver un valor que refleja solo una parte de ** lo que se muestra ** fecha y hora. Lo llamaría un error, pero ha estado allí durante décadas ... – EBlake

36

Lo mejor es usar dos DateTimePickers para el empleo Uno será el valor predeterminado para la sección de la fecha y la segunda DateTimePicker es para la porción de tiempo.Formatee el segundo DateTimePicker de la siguiente manera.

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

los dos deben tener este aspecto después de que los hayan capturado

Two Date Time Pickers

Para obtener el DateTime tanto de estos controles utilizan el siguiente código

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

Para asignar el DateTime a ambos controles utilizan el siguiente código

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

¿Existe la posibilidad de aumentar la frecuencia de minutos a 30 minutos? Cuando el usuario hace clic en el botón arriba o abajo? – FaizanRabbani

+0

¡Gran respuesta! Hice UserControl personalizado para reutilizarlo muchas veces en mi proyecto. – mpasko256

7

Diríjase a en Visual Studio y configure Format en . Debajo de CustomFormat ingrese su formato. En mi caso he usado MMMMdd, yyyy | hh:mm

enter image description here
dateTimePickerProperties

Cuestiones relacionadas