2012-05-10 50 views
30

Tôi có hai ngày, một ngày ít hơn ngày kia. Tôi muốn tạo ra một chuỗi như mộtNgày, giờ, phút, giây giữa hai ngày

"0 ngày, 0 giờ, 23 phút, 18 giây" này

đại diện cho sự khác biệt giữa hai ngày. Làm thế nào tôi có thể có được những yếu tố của chuỗi này?

+1

cảm ơn các bạn - Tôi ước tôi có thể chấp nhận tất cả các câu trả lời của bạn nhưng điều đó không được phép vì vậy tôi đã upvoted tất cả các câu trả lời của bạn. –

Trả lời

70

TimeSpan là đối tượng bạn cần:

TimeSpan span = (DateTime.Now - DateTime.Now); 

String.Format("{0} days, {1} hours, {2} minutes, {3} seconds", 
    span.Days, span.Hours, span.Minutes, span.Seconds); 
+0

nhưng điều này sẽ cho tôi ngày, giờ, phút và giây? –

+2

http://msdn.microsoft.com/en-us/library/system.timespan.aspx –

+0

chỉ cần sử dụng span.Days, span.Hours etc ... –

9

Khi bạn trừ một số DateTime từ một số khác, bạn sẽ nhận được một phiên bản TimeSpan, hiển thị các giá trị đó.

TimeSpan diff = DateTime.Now - DateTime.Today; 
string formatted = string.Format(
         CultureInfo.CurrentCulture, 
         "{0} days, {1} hours, {2} minutes, {3} seconds", 
         diff.Days, 
         diff.Hours, 
         diff.Minutes, 
         diff.Seconds); 
2

Bạn đã cố gắng sử dụng

TimeSpan() 

rằng chắc chắn có thể làm những gì bạn muốn

3

Sử dụng một TimeSpan

DateTime startTime = DateTime.Now; 

DateTime endTime = DateTime.Now.AddSeconds(75); 

TimeSpan span = endTime.Subtract (startTime); 
Console.WriteLine("Time Difference (seconds): " + span.Seconds); 
Console.WriteLine("Time Difference (minutes): " + span.Minutes); 
Console.WriteLine("Time Difference (hours): " + span.Hours); 
Console.WriteLine("Time Difference (days): " + span.Days); 

String yourString = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", 
    span.Days, span.Hours, span.Minutes, span.Seconds); 
1

Làm thế nào về một cái gì đó như thế này?

TimeSpan diff = dateTimeNew - dateTimeOld; 
    string output = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", diff.Days, diff.Hours, diff.Minutes, diff.Seconds); 
    Console.WriteLine(output); 
2
DateTime myDay = DateTime.Now; 
    DateTime otherDate = DateTime.Now.AddYears(1); 
    var test = otherDate.Subtract(myDay); 
    Console.WriteLine("Days:" + test.Days + "Hours:" + test.Hours +"Minutes" + test.Minutes +"Seconds" + test.Seconds); 

đây thử nghiệm là loại dấu thời gian

+2

Chỉ để tránh nhầm lẫn, _.TotalSeconds_ sẽ trả về ** tổng số ** số giây, do đó, khoảng thời gian 1 giờ sẽ trả về 3,600 Tổng số giây. Thuộc tính _.Seconds_ sẽ trả về 0 giây vì không có "còn sót lại" trong khoảng thời gian 1 giờ. – CodeHxr

+1

@CodeHxr, phải. Tôi sẽ cập nhật nó – Habib

3

Sử dụng lớp TimeSpan, mà bạn sẽ nhận được khi bạn trừ đi số ngày.

Bạn có thể định dạng đầu ra bằng cách sử dụng các chuỗi định dạng standard hoặc custom định dạng.

"0 ngày, 0 giờ, 23 phút, 18 giây"

có thể có với một cái gì đó như:

TimeSpan ts = DateTime.Now - DateTime.Today; 
Console.WriteLine(
    string.Format("{0:%d} days, {0:%h} hours, {0:%m} minutes, {0:%s} seconds", ts) 
); 

IMO, nó sạch hơn và dễ dàng hơn để sử dụng string.Format thay vì phải thoát khỏi các từ trong chuỗi định dạng của bạn (mà bạn cần nếu bạn chỉ sử dụng .ToString) hoặc xây dựng nó theo cách thủ công.

1
TimeSpan diffTime = dateTimeNew -PreviousDate; 
int days=diffTime.Days; 
int hours=diffTime.Hours; 
int minutes=diffTime.Minutes; 
int seconds=diffTime.Seconds; 
+0

OP muốn xây dựng một chuỗi từ kết quả của phép tính. Phần đó bị thiếu trong câu trả lời của bạn. – kRiZ

2

Đừng quên rằng nếu bạn muốn tính toán này để được cầm tay bạn cần lưu trữ nó như là UTC và sau đó khi bạn hiển thị nó chuyển đổi thành giờ cục bộ. Quy tắc chung Lưu ngày là UTC và chuyển đổi thành giờ địa phương để trình bày.

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