DateTimePicker: pilih tanggal dan waktu

143

Apakah mungkin menggunakan DateTimePicker (Winforms) untuk memilih tanggal dan waktu (dalam dropdown)? Bagaimana Anda mengubah tampilan khusus dari nilai yang dipilih? Juga, apakah mungkin untuk memungkinkan pengguna untuk mengetik tanggal / waktu secara manual?

Grzenio
sumber

Jawaban:

187

Atur Format ke Kustom dan kemudian tentukan format:

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

atau bagaimanapun Anda ingin meletakkannya. Anda kemudian dapat mengetik secara langsung tanggal / waktu. Jika Anda menggunakan MMM, Anda harus menggunakan nilai numerik untuk bulan tersebut untuk masuk, kecuali jika Anda menulis sendiri beberapa kode untuk itu (mis., 5 hasil pada bulan Mei)

Tidak tahu tentang pemilih untuk kencan dan waktu bersama. Kedengarannya seperti kontrol khusus untuk saya.

itsmatt
sumber
16
Jam 24 jam: "dd MM yyyy HH mm ss". Saya kira pengembang harus peduli dengan lokalisasi (format tanggal / waktu berbeda di berbagai negara). Salam dari Austria.
hfrmobile
6
@ hfrmobile - Anda juga dapat menggunakan System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePatterndan System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePatternuntuk mendapatkan format untuk budaya saat ini. Tautan MSDN
Wai Ha Lee
1
Setuju dengan @WaiHaLee: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " " + time Anda juga dapat membatasi, katakanlah, komponen waktu secara manual: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " HH:mm"
SteveCinq
Saya menggunakan ini tetapi saya meletakkan CustomFormat di properti pemilih daripada menggunakan kode
buta Skwirl
67

Yang terbaik adalah menggunakan dua DateTimePickers untuk Job One akan menjadi default untuk bagian tanggal dan DateTimePicker kedua adalah untuk bagian waktu. Format DateTimePicker kedua sebagai berikut.

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

Keduanya harus terlihat seperti ini setelah Anda menangkapnya

Dua Pemilih Waktu Tanggal

Untuk mendapatkan DateTime dari kedua kontrol ini gunakan kode berikut

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

Untuk menetapkan DateTime ke kedua kontrol ini gunakan kode berikut

datePortionDateTimePicker.Value  = myDate.Date;  
timePortionDateTimePicker.Value  = myDate.TimeOfDay; 
Vectoria
sumber
1
Apakah ada kemungkinan untuk meningkatkan frekuensi menit menjadi 30 menit? Kapan pengguna mengklik tombol naik atau turun?
FaizanHussainRabbani
Jawaban bagus! Saya membuat UserControl khusus untuk menggunakannya kembali berkali-kali dalam proyek saya.
mpasko256
Terima kasih untuk sarannya. Masuk akal untuk memiliki dua kontrol yang berbeda untuk tanggal dan waktu.
Najeeb
45

Sayangnya, ini adalah salah satu dari banyak misnomers dalam kerangka kerja, atau paling tidak merupakan pelanggaran terhadap SRP.

Untuk menggunakan DateTimePicker beberapa kali, atur properti Format ke Time atau Custom (Gunakan Custom jika Anda ingin mengontrol format waktu menggunakan properti CustomFormat). Kemudian setel properti ShowUpDown menjadi true.

Meskipun pengguna dapat mengatur tanggal dan waktu bersama secara manual, mereka tidak dapat menggunakan GUI untuk mengatur keduanya.

Nescio
sumber
24

DateTime Picker dapat digunakan untuk memilih tanggal dan waktu itulah sebabnya disebut 'Date and Time Picker'. Anda dapat mengatur properti " Format " menjadi " Kustom " dan mengatur kombinasi penentu format yang berbeda untuk mewakili / memilih tanggal / waktu dalam format yang berbeda di properti " Format Kustom ". Namun jika Anda ingin mengubah Tanggal, maka kalender pop-up dapat digunakan sedangkan dalam hal pemilihan Waktu (dalam kontrol yang sama Anda terikat untuk menggunakan tombol naik / turun untuk mengubah nilai.

Misalnya format khusus " ddddd, MMMMdd, yyyy hh: mm: ss tt " akan memberikan Anda hasil seperti ini: " Kamis, 20 Agustus 2009 02:55:23 PM ".

Anda dapat bermain-main dengan kombinasi berbeda untuk penentu format yang sesuai dengan kebutuhan Anda, misalnya MMMM akan memberikan " Agustus " sedangkan MM akan memberikan " Agustus "

Orang Denmark
sumber
"Pemilih DateTime dapat digunakan untuk memilih tanggal dan waktu itulah sebabnya disebut 'Pemilih Tanggal dan Waktu'." - Kecuali itu tidak bisa, itulah sebabnya pertanyaan itu diajukan.
Derf Skren
Memang, kontrol ini sangat membuat frustrasi. Aku hanya menghabiskan sore kode debug sampai aku menyadari bahwa hal darn akan mengembalikan nilai yang mewakili tanggal-diedit pengguna OR waktu, tetapi tidak keduanya. Saya harus curhat: bagaimana kontrol menunjukkan tanggal dan waktu yang diedit pengguna yang valid (format khusus saya yyyy-MM-dd HH:mm) dan kemudian mengembalikan nilai yang mencerminkan hanya sebagian dari tanggal dan waktu yang ditampilkan . Saya menyebutnya bug, tetapi sudah ada selama beberapa dekade ...
EBlake
16

Pergi ke Propertiesdari Anda dateTimePickerdi Visual Studio dan atur Formatke Custom. Di bawah CustomFormatmasukkan format Anda. Dalam kasus saya, saya menggunakanMMMMdd, yyyy | hh:mm

masukkan deskripsi gambar di sini
dateTimePickerProperties

Serge Voloshenko
sumber
Dia tidak bertanya bagaimana memformat / menampilkan waktu pada DateTimePicker. Dia bertanya bagaimana membuatnya memilih waktu (maka nama DateTimePicker, orang akan menganggap bahwa kontrol juga dapat digunakan untuk memilih waktu)
nivs1978
Ini harus menjadi jawaban yang tepat. Bekerja seperti pesona
KingMak
1

Anda bisa mendapatkannya untuk menampilkan waktu . Dari itu Anda mungkin harus memiliki dua kontrol (satu tanggal, satu kali) untuk mencapai apa yang Anda inginkan.

Craig
sumber
1

Saya khawatir kontrol DateTimePicker tidak memiliki kemampuan untuk melakukan hal-hal itu. Ini adalah kontrol yang cukup mendasar (dan membuat frustrasi!). Pilihan terbaik Anda mungkin menemukan kontrol pihak ketiga yang melakukan apa yang Anda inginkan.

Untuk opsi mengetik tanggal dan waktu secara manual, Anda bisa membangun komponen khusus dengan kombinasi TextBox / DateTimePicker untuk mencapai ini, dan itu mungkin bekerja dengan cukup baik, jika kontrol pihak ketiga bukan opsi.

Jeffrey L Whitledge
sumber