DateTimePicker: chọn cả ngày và giờ


143

Có thể sử dụng DateTimePicker (Winforms) để chọn cả ngày và giờ (trong danh sách thả xuống) không? Làm thế nào để bạn thay đổi hiển thị tùy chỉnh của giá trị được chọn? Ngoài ra, có thể cho phép người dùng nhập ngày / giờ theo cách thủ công không?

Câu trả lời:


187

Đặt Định dạng thành Tùy chỉnh và sau đó chỉ định định dạng:

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

hoặc tuy nhiên bạn muốn đặt nó ra. Sau đó bạn có thể nhập trực tiếp ngày / giờ. Nếu bạn sử dụng MMM, bạn sẽ cần sử dụng giá trị số cho tháng để nhập, trừ khi bạn tự viết một số mã cho điều đó (ví dụ: 5 kết quả vào tháng 5)

Không biết về công cụ chọn ngày và thời gian cùng nhau. Âm thanh như một điều khiển tùy chỉnh với tôi.


16
Đồng hồ 24 giờ: "dd MM yyyy HH mm ss". Tôi đoán nhà phát triển phải quan tâm đến nội địa hóa (định dạng ngày / giờ khác nhau ở các quốc gia khác nhau). Lời chào từ Áo.
hfrmobile

6
@hfrmobile - bạn cũng có thể sử dụng System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePatternSystem.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePatternđể có được định dạng cho văn hóa hiện tại. Liên kết MSDN
Wai Ha Lee

1
Đồng ý với @WaiHaLee: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " " + time Bạn cũng có thể giới hạn, giả sử, thành phần thời gian theo cách thủ công: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " HH:mm"
SteveCinq

Tôi đã sử dụng cái này nhưng tôi đặt CustomFormat trong các thuộc tính của bộ chọn thay vì sử dụng mã
mù Skwirl

66

Tốt nhất là sử dụng hai DateTimePickers cho Công việc Một sẽ là mặc định cho phần ngày và DateTimePicker thứ hai dành cho phần thời gian. Định dạng DateTimePicker thứ hai như sau.

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

Hai nên trông như thế này sau khi bạn chụp chúng

Bộ chọn thời gian hai ngày

Để lấy DateTime từ cả hai điều khiển này, hãy sử dụng đoạn mã sau

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

Để gán DateTime cho cả hai điều khiển này, hãy sử dụng đoạn mã sau

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

1
Có khả năng tăng tần suất phút lên 30 phút không? Khi người dùng nhấp vào nút lên hoặc xuống?
FaizanHussainRabbani

Câu trả lời chính xác! Tôi đã tạo UserControl tùy chỉnh để sử dụng lại nhiều lần trong dự án của mình.
mpasko256

Cám ơn vì sự gợi ý. Có nghĩa là có hai điều khiển khác nhau cho ngày và thời gian.
Najeeb

45

Thật không may, đây là một trong nhiều cách hiểu sai trong khuôn khổ hoặc ít nhất là vi phạm SRP.

Để sử dụng DateTimePicker cho thời gian, hãy đặt thuộc tính Định dạng thành Thời gian hoặc Tùy chỉnh (Sử dụng Tùy chỉnh nếu bạn muốn kiểm soát định dạng thời gian bằng thuộc tính CustomFormat). Sau đó đặt thuộc tính ShowUpDown thành true.

Mặc dù người dùng có thể đặt ngày và giờ theo cách thủ công, họ không thể sử dụng GUI để đặt cả hai.


24

Bộ chọn DateTime có thể được sử dụng để chọn cả ngày và giờ, đó là lý do tại sao nó được gọi là 'Bộ chọn ngày và giờ'. Bạn có thể đặt thuộc tính " Định dạng " thành " Tùy chỉnh " và đặt kết hợp các chỉ định định dạng khác nhau để thể hiện / chọn ngày / giờ ở các định dạng khác nhau trong thuộc tính " Định dạng tùy chỉnh ". Tuy nhiên, nếu bạn muốn thay đổi Ngày, thì lịch bật lên có thể được sử dụng trong khi đó trong trường hợp chọn Thời gian (trong cùng một điều khiển, bạn buộc phải sử dụng các phím lên / xuống để thay đổi giá trị.

Ví dụ: định dạng tùy chỉnh " ddddd, MMMM dd, yyyy hh: mm: ss tt " sẽ cho bạn kết quả như sau: " Thứ năm, ngày 20 tháng 8 năm 2009 02:55:23 PM ".

Bạn có thể chơi xung quanh với các kết hợp khác nhau để xác định định dạng phù hợp với nhu cầu của mình, ví dụ: MMMM sẽ cho " tháng 8 " trong khi MM sẽ cho " tháng 8 "


"Bộ chọn DateTime có thể được sử dụng để chọn cả ngày và giờ, đó là lý do tại sao nó được gọi là 'Bộ chọn ngày và giờ'." - ngoại trừ việc không thể, đó là lý do tại sao câu hỏi được hỏi.
Derf Skren 19/2/2015

Thật vậy, kiểm soát này là rất bực bội. Tôi vừa trải qua một mã gỡ lỗi buổi chiều cho đến khi tôi nhận ra rằng thứ cực đoan sẽ trả về một giá trị đại diện cho ngày do người dùng chỉnh sửa HOẶC thời gian, nhưng không phải cả hai. Tôi phải trút giận: làm thế nào một điều khiển có thể hiển thị ngày và giờ do người dùng chỉnh sửa hợp lệ (định dạng tùy chỉnh của tôi là yyyy-MM-dd HH:mm) và sau đó trả về một giá trị chỉ phản ánh một phần của ngày và giờ được hiển thị . Tôi gọi nó là một lỗi, nhưng nó đã tồn tại trong nhiều thập kỷ ...
EBlake

16

Chuyển đến Visual Studio Propertiescủa bạn dateTimePickervà đặt Formatthành Custom. Dưới CustomFormatnhập định dạng của bạn. Trong trường hợp của tôi, tôi đã sử dụngMMMMdd, yyyy | hh:mm

nhập mô tả hình ảnh ở đây
dateTimePickerProperies


Anh ấy không hỏi làm thế nào để định dạng / hiển thị thời gian trên DateTimePicker. Anh ta đang hỏi làm thế nào để chọn thời gian (do đó tên DateTimePicker, người ta sẽ cho rằng điều khiển cũng có thể được sử dụng để chọn thời gian)
nivs1978

Đây phải là câu trả lời đúng. Làm việc như một

1

Bạn có thể lấy nó để hiển thị thời gian . Từ đó bạn có thể sẽ phải có hai điều khiển (một ngày, một lần) để hoàn thành những gì bạn muốn.


1

Tôi sợ điều khiển DateTimePicker không có khả năng thực hiện những việc đó. Đó là một điều khiển khá cơ bản (và bực bội!). Tùy chọn tốt nhất của bạn có thể là tìm một điều khiển của bên thứ ba thực hiện những gì bạn muốn.

Đối với tùy chọn nhập ngày và giờ theo cách thủ công, bạn có thể xây dựng một thành phần tùy chỉnh với kết hợp TextBox / DateTimePicker để thực hiện việc này và nó có thể hoạt động khá tốt, nếu điều khiển của bên thứ ba không phải là một tùy chọn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.