2011-02-09 40 views
131

Tôi đang lấy hai giá trị thời gian ngày từ cơ sở dữ liệu. Khi giá trị được lấy ra, tôi cần sự khác biệt giữa hai giá trị. Đối với điều đó, tôi tạo một biến thời gian để lưu trữ sự khác biệt của 2 giá trị ngày tháng.Hiển thị sự khác biệt giữa hai giá trị ngày giờ trong giờ

TimeSpan? variable = datevalue1 - datevalue2; 

Bây giờ tôi cần hiển thị sự khác biệt được lưu trữ trong biến thời gian về số giờ. Tôi đã gọi TimeSpan.TotalHours nhưng không thể áp dụng tương tự vì một số lý do. Tôi làm như thế nào? Tôi đang sử dụng C# trên một dự án MVC. Tôi đơn giản cần phải hiển thị giá trị khác biệt trong giờ?

CHỈNH SỬA: Vì khoảng thời gian không thể thực hiện được, tôi không thể sử dụng thuộc tính tổng số giờ. Bây giờ tôi có thể sử dụng nó bằng cách thực hiện TimeSpanVal.Value.TotalHours;

+3

Tại sao y có thể bạn không sử dụng 'TimeSpan.TotalHours'? –

+0

nó không cho phép tôi. tôi đã thử. :( – reggie

+0

là vì khoảng thời gian của tôi không thể sử dụng được mà tôi không thể sử dụng thuộc tính totalhours? – reggie

Trả lời

96

Tôi nghĩ bạn đang bối rối vì bạn chưa khai báo số TimeSpan bạn đã khai báo một số TimeSpan?nullableTimeSpan. Xóa dấu chấm hỏi nếu bạn không cần nó hoặc không thể sử dụng được variable.Value.TotalHours.

57

Trong mẫu, chúng tôi đang tạo hai đối tượng datetime, một với thời gian hiện tại và một đối tượng khác với 75 giây được thêm vào thời gian hiện tại. Sau đó, chúng ta sẽ gọi phương thức .Subtract() trên đối tượng DateTime thứ hai. Điều này sẽ trả về một đối tượng TimeSpan. Khi chúng ta nhận được đối tượng TimeSpan, chúng ta có thể sử dụng các thuộc tính của TimeSpan để nhận các Giờ, Phút và Giây thực tế.

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); 

Kết quả:

Time Difference (giây): 15 Time Difference (phút): 1 Time Difference (giờ): 0 Time Difference (ngày): 0

+18

Bạn muốn sử dụng "Total" như 'TotalSeconds',' TotalMinutes' etc –

36

Có lý do nào bạn đang sử dụng Nullable không?

Nếu bạn muốn sử dụng Nullable thì bạn có thể viết variable.Value.TotalHours.

Hoặc bạn chỉ có thể viết: (datevalue1 - datevalue2).TotalHours.

+0

Có lẽ vì datevalue1 hoặc datevalue2 là 'DateTime? ' –

+0

@Filip, ok, chúng phải là' DateTime'. Trong .NET, 'DateTime - DateTime = TimeSpan'. –

+1

@ Illya, tôi có nghĩa là chúng có lẽ là 'Nullable 'và do đó bạn nhận được một' Nullable '. –

125

bạn cũng có thể muốn xem xét

var hours = (datevalue1 - datevalue2).TotalHours; 
+0

nhưng trong trường hợp này hệ thống hiển thị "'System.Nullable ' không chứa định nghĩa cho 'TotalHours' và không có phương thức mở rộng 'TotalHours' chấp nhận đối số đầu tiên của loại 'System.Nullable ' có thể được tìm thấy ". Bạn có thể cho tôi biết lý do không? – Neha

+5

Nullable sẽ cần một .Value.TotalHours thay vì chỉ .TotalHours. Đó là một yếu tố của gói rỗng. Bạn có thể thay thế nó như là một khoảng thời gian -> ((TimeSpan) (nullabledatevalue1 - nullabledatevalue2)). – MarkKGreenway

5

Dưới đây là một ví dụ về trừ hai ngày tháng trong C# ...

if (DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24) 
{ 
... 
} 
0
var startTime = new TimeSpan(6, 0, 0); // 6:00 AM 
var endTime = new TimeSpan(5, 30, 0); // 5:30 AM 
var hours24 = new TimeSpan(24, 0, 0); 
var difference = endTime.Subtract(startTime); // (-00:30:00) 
difference = (difference.Duration() != difference) ? hours24.Subtract(difference.Duration()) : difference; // (23:30:00) 

cũng có thể thêm chênh lệch giữa ngày nếu chúng ta so sánh hai ngày khác nhau

new TimeSpan(24 * days, 0, 0) 
Các vấn đề liên quan