2010-01-27 40 views
42

Tôi có lịch và hộp văn bản có chứa thời gian trong ngày. Tôi muốn tạo ra một datetime đó là sự kết hợp của hai. Tôi biết tôi có thể làm điều đó bằng cách nhìn vào giờ và mintues và sau đó thêm chúng vào lịch DateTime, nhưng điều này có vẻ khá lộn xộn.Thêm Thời gian vào một Ngày giờ trong C#

Có cách nào tốt hơn không?

Trả lời

74

Bạn có thể sử dụng phương thức DateTime.Add() để thêm thời gian vào ngày.

DateTime date = DateTime.Now; 
TimeSpan time = new TimeSpan(36, 0, 0, 0); 
DateTime combined = date.Add(time); 
Console.WriteLine("{0:dddd}", combined); 

Bạn cũng có thể tạo khoảng thời gian bằng cách parsing a String, nếu đó là những gì bạn cần làm.

Ngoài ra, bạn có thể xem xét sử dụng các điều khiển khác. Bạn đã không đề cập đến nếu bạn đang sử dụng winforms, wpf hoặc asp.net, nhưng có nhiều điều khiển ngày và thời gian chọn hỗ trợ lựa chọn cả ngày và giờ.

+1

Bí quyết, cảm ơn rất nhiều. – 4imble

+0

sau giờ làm việc, tôi đã cố gắng cho '11:57 pm' và làm việc này: 'TimeSpan time = new TimeSpan (23, 57, 00); DateTime date_with_time = mydate.Add (time); ' – stom

+0

Nếu bạn ở trong tình huống mà bạn có một lượng thời gian cụ thể (ví dụ: X giờ hoặc Y phút) có các hàm trợ giúp để bạn không phải tạo một TimeSpan(). ví dụ: '' 'DateTime.UtcNow.AddSeconds (10);' '' // một thời gian 10 giây trong tương lai! –

0

Kết hợp cả hai. Bộ chọn ngày-giờ cũng hỗ trợ chọn thời gian.

Bạn chỉ cần thay đổi Định dạng-Thuộc tính và có thể là Thuộc tính tùy chỉnh.

3

Tùy thuộc vào cách bạn định dạng (và xác nhận!) Ngày nhập vào hộp văn bản, bạn có thể làm điều này:

TimeSpan time; 

if (TimeSpan.TryParse(textboxTime.Text, out time)) 
{ 
    // calendarDate is the DateTime value of the calendar control 
    calendarDate = calendarDate.Add(time); 
} 
else 
{ 
    // notify user about wrong date format 
} 

Lưu ý rằng TimeSpan.TryParse hy vọng chuỗi được trong 'hh: mm' định dạng (giây tùy chọn).

3

Sử dụng https://github.com/FluentDateTime/FluentDateTime

DateTime dateTime = DateTime.Now; 
DateTime combined = dateTime + 36.Hours(); 
Console.WriteLine(combined); 
+2

Tôi yêu FuentDateTime. Nếu đây là tổng thời gian duy nhất bạn muốn làm thì nó có thể không đáng giá. Nhưng, có rất nhiều thứ tuyệt vời khác trong đó như tìm ra khi thứ Sáu tới là. –

+0

@RichardGarside: Bạn có nghĩa là gói NuStet ​​FluentDateTime từ [GitHub] (https://github.com/FluentDateTime) không? –

+0

Nó có sẵn dưới dạng gói Nuget. Có các liên kết trên trang Github. –

6

Nếu bạn đang sử dụng hai đối tượng DateTime, một để lưu trữ ngày kia thời điểm đó, bạn có thể làm như sau:

var date = new DateTime(2016,6,28); 

var time = new DateTime(1,1,1,13,13,13); 

var combinedDateTime = date.AddTicks(time.TimeOfDay.Ticks); 

Một ví dụ về điều này có thể được tìm thấy here

+0

Chỉ cần những gì tôi đang tìm kiếm – kpkpkp

0
DateTime newDateTime = dtReceived.Value.Date.Add(TimeSpan.Parse(dtReceivedTime.Value.ToShortTimeString())); 
+1

Mặc dù đây là câu trả lời chính xác, bạn nên cung cấp giải thích cho OP thay vì cung cấp mã chỉ trả lời để đảm bảo rằng họ (và bất kỳ chế độ xem nào khác) hiểu tại sao câu trả lời là chính xác. – JNYRanger

Các vấn đề liên quan