DateTimePicker: เลือกทั้งวันที่และเวลา


143

เป็นไปได้ไหมที่จะใช้ DateTimePicker (Winforms) เพื่อเลือกวันที่และเวลา (ในดรอปดาวน์) คุณจะเปลี่ยนการแสดงผลที่กำหนดเองของค่าที่เลือกได้อย่างไร นอกจากนี้ยังเป็นไปได้ไหมที่จะทำให้ผู้ใช้สามารถพิมพ์วันที่ / เวลาด้วยตนเองได้?

คำตอบ:


187

ตั้งค่ารูปแบบเป็นกำหนดเองจากนั้นระบุรูปแบบ:

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

หรืออย่างไรก็ตามคุณต้องการจัดวางมัน จากนั้นคุณสามารถพิมพ์วันที่ / เวลาได้โดยตรง หากคุณใช้ MMM คุณจะต้องใช้ค่าตัวเลขสำหรับการเข้าเดือนยกเว้นว่าคุณเขียนรหัสด้วยตัวคุณเอง (เช่น 5 ผลลัพธ์ในเดือนพฤษภาคม)

ไม่ทราบเกี่ยวกับเครื่องมือเลือกวันและเวลาด้วยกัน ฟังดูเหมือนตัวควบคุมที่กำหนดเองสำหรับฉัน


16
นาฬิกา 24 ชั่วโมง: "dd MM yyyy HH mm ss" ฉันเดาว่านักพัฒนาจะต้องใส่ใจกับการแปล (รูปแบบวันที่ / เวลาในประเทศต่างๆ คำทักทายจากออสเตรีย
hfrmobile

6
@hfrmobile - คุณสามารถใช้System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePatternและSystem.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePatternรับรูปแบบของวัฒนธรรมปัจจุบันได้ ลิงก์ MSDN
Wai Ha Lee

1
เห็นด้วยกับ @WaiHaLee: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " " + time คุณยังสามารถ จำกัด พูดองค์ประกอบเวลาด้วยตนเอง: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " HH:mm"
SteveCinq

ฉันใช้สิ่งนี้ แต่ฉันใส่ CustomFormat ในคุณสมบัติตัวเลือกแทนที่จะใช้รหัส
blind Skwirl

67

เป็นการดีที่สุดที่จะใช้สอง DateTimePickers สำหรับงานหนึ่งจะเป็นค่าเริ่มต้นสำหรับส่วนวันที่และ DateTimePicker ที่สองสำหรับส่วนเวลา จัดรูปแบบ DateTimePicker ที่สองดังนี้

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

ทั้งสองควรมีลักษณะเช่นนี้หลังจากที่คุณจับพวกเขา

ตัวเลือกเวลาสองวัน

ในการรับ DateTime จากทั้งสองตัวควบคุมให้ใช้รหัสต่อไปนี้

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

ในการกำหนด DateTime ให้กับตัวควบคุมทั้งสองใช้รหัสต่อไปนี้

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

1
มีความเป็นไปได้ที่จะเพิ่มความถี่นาทีเป็น 30 นาทีหรือไม่? เมื่อผู้ใช้คลิกปุ่มขึ้นหรือลง?
FaizanHussainRabbani

คำตอบที่ดี! ฉันสร้าง UserControl แบบกำหนดเองเพื่อนำมาใช้ซ้ำหลายครั้งในโครงการของฉัน
mpasko256

ขอบคุณสำหรับคำแนะนำ ทำให้รู้สึกถึงมีสองการควบคุมที่แตกต่างกันสำหรับวันที่และเวลา
Najeeb

45

โชคไม่ดีที่นี่เป็นหนึ่งในบรรดาผู้เรียกชื่อผิดหลายคนในกรอบหรือเป็นการละเมิด SRP ที่สุด

ในการใช้ DateTimePicker เป็นครั้งให้ตั้งค่าคุณสมบัติ Format เป็น Time หรือ Custom (ใช้ Custom หากคุณต้องการควบคุมรูปแบบของเวลาโดยใช้คุณสมบัติ CustomFormat) จากนั้นตั้งค่าคุณสมบัติ ShowUpDown เป็นจริง

แม้ว่าผู้ใช้อาจตั้งค่าวันที่และเวลาด้วยกันพวกเขาไม่สามารถใช้ GUI เพื่อตั้งค่าทั้งสอง


24

ตัวเลือก DateTime สามารถใช้เพื่อเลือกทั้งวันที่และเวลาซึ่งเป็นสาเหตุที่เรียกว่า 'ตัวเลือกวันที่และเวลา' คุณสามารถตั้งค่าคุณสมบัติ " รูปแบบ " เป็น " กำหนดเอง " และตั้งค่าตัวระบุรูปแบบที่แตกต่างกันเพื่อแสดง / เลือกวันที่ / เวลาในรูปแบบต่างๆในคุณสมบัติ " รูปแบบกำหนดเอง " อย่างไรก็ตามหากคุณต้องการเปลี่ยนวันที่คุณสามารถใช้ปฏิทินป๊อปอัปได้ในกรณีที่มีการเลือกเวลา (ในตัวควบคุมเดียวกันคุณจะต้องใช้ปุ่มขึ้น / ลงเพื่อเปลี่ยนค่า

ตัวอย่างเช่นรูปแบบที่กำหนดเอง " ddddd, MMMM dd, yyyy hh: mm: ss tt " จะให้ผลลัพธ์เช่นนี้: " วันพฤหัสบดีที่ 20 สิงหาคม 2009 เวลา 02:55:23 น. "

คุณสามารถเล่นกับชุดรูปแบบที่แตกต่างกันเพื่อให้เหมาะกับความต้องการของคุณเช่นMMMMจะให้ " สิงหาคม " ในขณะที่MMจะให้ " สิงหาคม "


"ตัวเลือก DateTime สามารถใช้เลือกทั้งวันที่และเวลาซึ่งเป็นสาเหตุที่เรียกว่า 'ตัวเลือกวันที่และเวลา' - ยกเว้นว่ามันไม่สามารถทำได้ซึ่งเป็นสาเหตุที่คำถามถูกถาม
Derf Skren

อันที่จริงการควบคุมนี้น่าผิดหวังมาก ฉันเพิ่งใช้รหัสการแก้จุดบกพร่องในช่วงบ่ายจนกว่าฉันจะรู้ว่าสิ่งที่ยี้จะส่งคืนค่าที่แสดงถึงวันที่หรือเวลาที่ผู้ใช้แก้ไขแต่ไม่ใช่ทั้งสองอย่าง ฉันต้องระบาย: วิธีการควบคุมสามารถแสดงวันที่ใช้แก้ไขที่ถูกต้องและเวลา (รูปแบบที่กำหนดเองของฉันคือyyyy-MM-dd HH:mm) และจากนั้นส่งกลับค่าที่สะท้อนให้เห็นเพียงส่วนหนึ่งของการแสดงวันที่และเวลา ฉันจะเรียกมันว่าเป็นข้อผิดพลาด แต่มันอยู่ที่นั่นมานานหลายสิบปี ...
EBlake

16

ไปที่PropertiesของคุณdateTimePickerใน Visual Studio และการตั้งค่าไปFormat Customภายใต้CustomFormatรูปแบบของคุณ ในกรณีของฉันฉันใช้MMMMdd, yyyy | hh:mm

ป้อนคำอธิบายรูปภาพที่นี่
dateTimePickerProperties


เขาไม่ได้ถามวิธีการฟอร์แมต / แสดงเวลาบน DateTimePicker เขาถามว่าจะเลือกเวลาได้อย่างไร (ด้วยเหตุนี้ชื่อ DateTimePicker จะถือว่าการควบคุมสามารถใช้เลือกเวลาได้ด้วย)
nivs1978

นี่ควรเป็นคำตอบที่ถูกต้อง ทำงานเหมือนมนต์เสน่ห์
KingMak

1

คุณจะได้รับในการแสดงเวลา จากนั้นคุณอาจต้องมีตัวควบคุมสองตัว (หนึ่งวันครั้งเดียว) เพื่อให้บรรลุสิ่งที่คุณต้องการ


1

ฉันกลัวว่าการควบคุม DateTimePicker จะไม่มีความสามารถในการทำสิ่งเหล่านั้น มันเป็นการควบคุมขั้นพื้นฐาน (และน่าผิดหวัง!) ตัวเลือกที่ดีที่สุดของคุณอาจเป็นการค้นหาการควบคุมของบุคคลที่สามที่ทำในสิ่งที่คุณต้องการ

สำหรับตัวเลือกในการพิมพ์วันที่และเวลาด้วยตนเองคุณสามารถสร้างส่วนประกอบแบบกำหนดเองด้วย TextBox / DateTimePicker รวมกันเพื่อทำสิ่งนี้และมันอาจทำงานได้ดีพอสมควรหากการควบคุมของบุคคลที่สามไม่ใช่ตัวเลือก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.