2012-01-26 43 views
43

Tôi có một chế độ xem dữ liệu trong ứng dụng của tôi có thời gian bắt đầu và kết thúc. Tôi muốn tính số phút giữa hai lần này. Cho đến nay tôi đã có:Tính số phút có giữa hai lần

var varFinish = tsTable.Rows[intCellRow]["Finish Time"]; 
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
int intMinutes = TimeSpan.FromMinutes(varTime); 

Nhưng dòng cuối cùng sẽ không biên dịch vì nó nói rằng tôi đang sử dụng đối số không hợp lệ cho hàm tạo Timespan. Tôi đã nghiên cứu khá nhiều về cách tính số phút giữa hai lần, nhưng tôi đánh một chút tường gạch. Có thể ai đó xin vui lòng tư vấn cho tôi về cách tốt nhất để đạt được mục tiêu của tôi.

EDIT/

Bây giờ mã của tôi là như sau:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"]; 
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
int intMinutes = (int)varTime.TotalMinutes; 

Nhưng tôi nhận được một dàn diễn viên không hợp lệ trên dòng thứ hai. Cả varFinish và varValue đều là thời gian, ví dụ: 10:00 và 8:00 nói. Vì vậy, không chắc chắn lý do tại sao họ sẽ không cast để loại DateTime?

+0

Nếu varFinish là một chuỗi, bạn không thể đúc một chuỗi để một DateTime. Bạn cần sử dụng DateTime.Parse (...). Thậm chí sau đó, nó sẽ ngụ ý ngày hôm nay nếu không có ngày trong varFinish. – Jim

Trả lời

70

Hãy thử điều này

DateTime startTime = varValue 

DateTime endTime = varTime 

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

Đây là câu trả lời hay, nhưng cho * 0 * trên span.Minutes khi chênh lệch giữa hai lần lớn hơn 1 giờ (tức là 60 phút trở lên) –

+6

@MalikAsif. Tôi chỉ thử điều này với một khoảng thời gian 61 phút và tôi nhận được 1 giờ và 1 phút, như mong đợi. Nếu khoảng thời gian chính xác là 60 phút, thì có, số phút sẽ bằng không. Bạn có nghĩ đến 'TotalMinutes()'? – Jim

+1

Có @Jim chính xác, đó là những gì tôi đã nói về. Điểm được đề cập là câu hỏi về tổng số phút. –

8

Trong mã quesion bạn đang sử dụng TimeSpan.FromMinutes không chính xác. Xin vui lòng xem các MSDN Documentation cho TimeSpan.FromMinutes, mang đến cho các phương pháp chữ ký sau đây:

public static TimeSpan FromMinutes(double value) 

do đó, các mã sau đây sẽ không biên dịch

var intMinutes = TimeSpan.FromMinutes(varTime); // won't compile 

Thay vào đó, bạn có thể sử dụng TimeSpan.TotalMinutes tài sản để thực hiện điều này số học. Ví dụ:

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes; 
int wholeMinutes = (int)fractionalMinutes; 
30
double minutes = varTime.TotalMinutes; 
int minutesRounded = (int)Math.Round(varTime.TotalMinutes); 

TimeSpan.TotalMinutes: Tổng số phút đại diện bởi trường hợp này.

+2

Có TotalMinutes là những gì tôi đang tìm kiếm. Cảm ơn bạn rất nhiều^_^ –

2

Có gì sai với varTime.TotalMinutes? :)

1

Nếu sự khác biệt giữa EndTime và StartTime là lớn hơn hoặc bằng 60 Minutes, báo cáo kết quả: endTime.Subtract(startTime).Minutes; sẽ luôn luôn trả (minutesDifference % 60). Rõ ràng đó là không mong muốn khi chúng ta chỉ nói về phút (không phải giờ ở đây).
Dưới đây là một số trong những cách nếu bạn muốn nhận được total number of minutes (trong typecasts khác nhau):

// Default value that is returned is of type *double* 
double double_minutes = endTime.Subtract(startTime).TotalMinutes; 
int integer_minutes = (int)endTime.Subtract(startTime).TotalMinutes; 
long long_minutes = (long)endTime.Subtract(startTime).TotalMinutes; 
string string_minutes = (string)endTime.Subtract(startTime).TotalMinutes; 
Các vấn đề liên quan