DateTimePicker: seleziona sia la data che l'ora


143

È possibile utilizzare DateTimePicker (Winforms) per selezionare sia la data che l'ora (nel menu a discesa)? Come si modifica la visualizzazione personalizzata del valore selezionato? Inoltre, è possibile abilitare l'utente a digitare manualmente la data / ora?

Risposte:


187

Impostare il formato su Personalizzato, quindi specificare il formato:

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

o comunque vuoi stenderlo. È quindi possibile digitare direttamente la data / ora. Se si utilizza MMM, è necessario utilizzare il valore numerico per il mese per l'inserimento, a meno che non si scriva un codice per questo (ad esempio, 5 risultati a maggio)

Non conoscere il selettore per data e ora insieme. Mi sembra un controllo personalizzato.


16
Orologio 24 ore: "gg MM aaaa HH mm ss". Immagino che lo sviluppatore debba preoccuparsi della localizzazione (diverso formato data / ora in diversi paesi). Saluti dall'Austria.
hfrmobile,

6
@hfrmobile: puoi anche utilizzare System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePatterne System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePatternottenere il formato per la cultura corrente. Collegamento MSDN
Wai Ha Lee,

1
Concordo con @WaiHaLee: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " " + time puoi anche limitare manualmente, per esempio, la componente temporale: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " HH:mm"
SteveCinq

L'ho usato ma ho inserito CustomFormat nelle proprietà del selettore anziché utilizzare il codice
blind Skwirl

67

È preferibile utilizzare due DateTimePicker per il Job One sarà l'impostazione predefinita per la sezione della data e il secondo DateTimePicker è per la parte dell'ora. Formatta il secondo DateTimePicker come segue.

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

I due dovrebbero apparire così dopo averli catturati

Due selettori di data e ora

Per ottenere DateTime da entrambi questi controlli, utilizzare il codice seguente

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

Per assegnare DateTime a entrambi questi controlli, utilizzare il seguente codice

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

1
C'è la possibilità di aumentare la frequenza dei minuti a 30 minuti? Quando l'utente fa clic sul pulsante su o giù?
FaizanHussainRabbani

Bella risposta! Ho creato UserControl personalizzato per riutilizzarlo più volte nel mio progetto.
mpasko256,

Grazie per il suggerimento Ha senso avere due diversi controlli per data e ora.
Najeeb,

45

Sfortunatamente, questo è uno dei tanti nomi errati nel framework, o nella migliore delle ipotesi una violazione di SRP.

Per utilizzare DateTimePicker per orari, imposta la proprietà Format su Time o Custom (usa Custom se vuoi controllare il formato dell'ora usando la proprietà CustomFormat). Quindi impostare la proprietà ShowUpDown su true.

Sebbene un utente possa impostare manualmente la data e l'ora, non può utilizzare la GUI per impostare entrambi.


24

Il selettore DateTime può essere utilizzato per selezionare sia la data che l'ora, per questo viene chiamato "Selettore data e ora". È possibile impostare la proprietà " Formato " su " Personalizzato " e impostare la combinazione di diversi identificatori di formato per rappresentare / selezionare la data / ora in diversi formati nel " Formato personalizzato proprietà " ". Tuttavia, se si desidera modificare la data, è possibile utilizzare il calendario a comparsa, mentre in caso di selezione dell'ora (nello stesso controllo si è tenuti a utilizzare i tasti su / giù per modificare i valori.

Ad esempio un formato personalizzato " ddddd, MMMM dd, yyyy hh: mm: ss tt " ti darà un risultato come questo: " giovedì 20 agosto 2009 02:55:23 ".

Puoi giocare con diverse combinazioni per gli identificatori di formato in base alle tue esigenze, ad esempio MMMM darà " Agosto " mentre MM darà " Aug "


"Il Selettore data e ora può essere utilizzato per selezionare sia la data che l'ora, per questo è chiamato" Selettore data e ora "." - tranne che non può, motivo per cui è stata posta la domanda.
Derf Skren,

In effetti, questo controllo è molto frustrante. Ho appena trascorso un pomeriggio nel debug del codice fino a quando ho capito che la cosa maledetta restituirà un valore che rappresenta la data o l' ora modificata dall'utente , ma non entrambe. Devo sfogarmi: come può un controllo mostrare una data e ora modificate dall'utente valide (il mio formato personalizzato è yyyy-MM-dd HH:mm) e quindi restituire un valore che riflette solo una parte della data e ora visualizzate . Lo definirei un bug, ma è lì da decenni ...
EBlake,

16

Vai al Propertiestuo dateTimePickerin Visual Studio e imposta Formatsu Custom. Sotto CustomFormatinserisci il tuo formato. Nel mio caso ho usatoMMMMdd, yyyy | hh:mm

inserisci qui la descrizione dell'immagine
dateTimePickerProperties


Non sta chiedendo come formattare / visualizzare l'ora su DateTimePicker. Sta chiedendo come farlo scegliere un orario (da qui il nome DateTimePicker, si potrebbe presumere che il controllo possa essere usato anche per scegliere un orario)
nivs1978

Questa dovrebbe essere la risposta giusta. Ha funzionato come un incantesimo
KingMak

1

Puoi farlo visualizzare il tempo . Da ciò dovrai probabilmente avere due controlli (una data, una volta) per ottenere ciò che desideri.


1

Temo che il controllo DateTimePicker non abbia la capacità di fare queste cose. È un controllo piuttosto semplice (e frustrante!). La tua migliore opzione potrebbe essere quella di trovare un controllo di terze parti che faccia quello che vuoi.

Per l'opzione di digitare manualmente la data e l'ora, è possibile creare un componente personalizzato con una combinazione TextBox / DateTimePicker per ottenere questo risultato e potrebbe funzionare abbastanza bene se i controlli di terze parti non sono un'opzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.