DateTimePicker: wybierz datę i godzinę


143

Czy można użyć DateTimePicker (Winforms), aby wybrać zarówno datę, jak i godzinę (z listy rozwijanej)? Jak zmienić niestandardowy sposób wyświetlania wybranej wartości? Czy można również umożliwić użytkownikowi ręczne wpisywanie daty / godziny?

Odpowiedzi:


187

Ustaw Format na Niestandardowy, a następnie określ format:

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

lub jak chcesz to rozłożyć. Następnie możesz wpisać bezpośrednio datę / godzinę. Jeśli korzystasz z MMM, musisz użyć wartości liczbowej miesiąca do wpisu, chyba że sam napiszesz kod (np. 5 wyników w maju)

Nie wiem o wybieraniu razem daty i godziny. Dla mnie brzmi jak niestandardowa kontrola.


16
Zegar 24-godzinny: „dd MM rrrr HH mm ss”. Myślę, że deweloper musi zadbać o lokalizację (inny format daty / czasu w różnych krajach). Pozdrowienia z Austrii.
hfrmobile

6
@hfrmobile - możesz również użyć System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePatterni, System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePatternaby uzyskać format dla bieżącej kultury. Łącze MSDN
Wai Ha Lee

1
Zgadzam się z @WaiHaLee: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " " + time Możesz również ograniczyć, powiedzmy, składnik czasu ręcznie: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " HH:mm"
SteveCinq

Użyłem tego, ale umieściłem CustomFormat we właściwościach selektora zamiast używać kodu
ślepy Skwirl

67

Najlepiej jest użyć dwóch DateTimePickers dla zadania. Pierwsza będzie domyślna dla sekcji daty, a druga DateTimePicker dla części czasu. Sformatuj drugi DateTimePicker w następujący sposób.

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

Po złapaniu Dwójka powinna wyglądać tak

Dwa selektory daty i godziny

Aby uzyskać DateTime z obu tych kontrolek, użyj następującego kodu

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

Aby przypisać DateTime do obu tych kontrolek, użyj następującego kodu

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

1
Czy istnieje możliwość zwiększenia częstotliwości minut do 30 minut? Kiedy użytkownik kliknie przycisk w górę lub w dół?
FaizanHussainRabbani

Świetna odpowiedź! Zrobiłem niestandardową UserControl, aby wielokrotnie używać jej w moim projekcie.
mpasko256,

Dzieki za sugestie. Sensowne jest posiadanie dwóch różnych kontrolek daty i godziny.
Najeeb

45

Niestety jest to jedna z wielu błędnych nazw w ramach lub w najlepszym przypadku naruszenie SRP.

Aby użyć DateTimePicker dla godzin, ustaw właściwość Format na Time lub Custom (użyj Custom, jeśli chcesz kontrolować format czasu za pomocą właściwości CustomFormat). Następnie ustaw właściwość ShowUpDown na true.

Chociaż użytkownik może ręcznie ustawić datę i godzinę, nie może użyć GUI do ustawienia obu.


24

Selektor dat i godzin może służyć do wybierania zarówno daty, jak i godziny, dlatego nazywa się go „Selektor daty i godziny”. Możesz ustawić właściwość „ Format ” na „ Niestandardowy ” i ustawić kombinację różnych specyfikatorów formatu do reprezentowania / wybierania daty / godziny w różnych formatach we właściwości „ Format niestandardowy ”. Jeśli jednak chcesz zmienić datę, możesz użyć kalendarza podręcznego, podczas gdy w przypadku wyboru czasu (w tej samej kontrolce musisz użyć klawiszy góra / dół do zmiany wartości.

Na przykład niestandardowy format „ ddddd, MMMM dd, rrrr gg: mm: ss tt ” da następujący wynik: „ Czwartek, 20 sierpnia 2009 14:55:23 ”.

Możesz pobawić się różnymi kombinacjami dla specyfikatorów formatu, aby dopasować je do swoich potrzeb, np. MMMM poda „ sierpień ”, podczas gdy MM poda „ sierpień


„Selektor dat i godzin może służyć do wybierania zarówno daty, jak i godziny, dlatego nazywa się go„ Selektor daty i godziny ”. - poza tym, że nie może, dlatego padło pytanie.
Derf Skren

Rzeczywiście, ta kontrola jest bardzo frustrująca. Po prostu spędziłem popołudnie na debugowaniu kodu, dopóki nie zdałem sobie sprawy, że darn rzecz zwróci wartość, która reprezentuje datę LUB godzinę edytowaną przez użytkownika , ale nie obie. Muszę wyrzucić: w jaki sposób formant może pokazać poprawną datę i godzinę edytowaną przez użytkownika (mój format niestandardowy to yyyy-MM-dd HH:mm), a następnie zwrócić wartość, która odzwierciedla tylko część wyświetlanej daty i godziny. Nazwałbym to błędem, ale istnieje od dziesięcioleci ...
EBlake

16

Przejdź do Propertiesswojego dateTimePickerw programie Visual Studio i ustaw Formatna Custom. Pod CustomFormatwprowadź swój format. W moim przypadku użyłemMMMMdd, yyyy | hh:mm

wprowadź opis obrazu tutaj
dateTimePickerProperties


Nie pyta, jak sformatować / wyświetlić czas w DateTimePicker. Pyta, jak sprawić, by wybierał czas (stąd nazwa DateTimePicker, można by przypuszczać, że kontrolka może być również używana do wybierania czasu)
nivs1978

To powinna być właściwa odpowiedź. Działało jak marzenie
KingMak

1

Możesz go zmusić do wyświetlania czasu . Z tego powodu prawdopodobnie będziesz musiał mieć dwie kontrole (jedna data, jeden raz), aby osiągnąć to, co chcesz.


1

Obawiam się, że formant DateTimePicker nie ma możliwości wykonywania tych czynności. To dość prosta (i frustrująca!) Kontrola. Najlepszym rozwiązaniem może być znalezienie kontrolki innej firmy, która robi to, co chcesz.

W przypadku opcji ręcznego wpisywania daty i godziny można zbudować niestandardowy komponent z kombinacją TextBox / DateTimePicker, aby to osiągnąć, i może to działać całkiem dobrze, jeśli kontrolki innych firm nie są opcją.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.