Tính xem có bao nhiêu phút giữa hai thời điểm


86

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

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 các đối số không hợp lệ cho hàm tạo Timespan. Tôi đã nghiên cứu khá kỹ về cách tính số phút giữa hai lần, nhưng tôi hơi va vào một bức tường gạch. Ai đó có thể 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.

BIÊN TẬP/

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

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

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


Nếu varFinish là một chuỗi, bạn không thể truyền một chuỗi thành DateTime. Bạn cần sử dụng DateTime.Parse (...). Ngay cả khi đó, nó sẽ ngụ ý ngày hôm nay nếu không có ngày trong varFinish.
— Jim,

Câu trả lời:


160

Thử đi

DateTime startTime = varValue
DateTime endTime = varTime

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (minutes): " + span.TotalMinutes );

Chỉnh sửa: Nếu bạn đang thử 'span.Minutes', điều này sẽ chỉ trả về số phút của khoảng thời gian [0 ~ 59], để trả về tổng của tất cả số phút từ khoảng thời gian này, chỉ cần sử dụng 'span.TotalMinutes'.


2
Đây là một câu trả lời tốt, nhưng mang lại 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 hoặc lâu hơn)
— Asif Mehmood

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

17
KHÔNG ĐÚNG. span.Minutestrả về một số [0..59]. Sử dụng span.TotalMinutesthay thế
— Sten Petrov

2
Đây không phải là câu trả lời được chấp nhận. Theo các ý kiến ​​khác, nó không giải quyết được câu hỏi một cách chính xác.
— tjmoore

2
@tjmoore cảm ơn bạn đã phản hồi, tôi đồng ý với bạn. Tôi đã trả lời câu hỏi ban đầu vào tháng 1 năm 2012, sau đó câu hỏi đã được chỉnh sửa. Tôi thỉnh thoảng nhận được phiếu phản đối cho câu trả lời này, có lẽ bởi vì hầu hết mọi người đang đọc câu trả lời 5 năm sau khi câu hỏi ban đầu chưa được chỉnh sửa được hỏi.
— Kane

35
double minutes = varTime.TotalMinutes;
int minutesRounded = (int)Math.Round(varTime.TotalMinutes);

TimeSpan.TotalMinutes : Tổng số phút được thể hiện bởi phiên bản 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 ^ _ ^
— Wahid Bitar

int phútRounds = (int) Math.Round (phút);
— Sagi

9

Trong mã quesion của bạn, bạn đang sử dụng TimeSpan.FromMinuteskhông chính xác. Vui lòng xem Tài liệu MSDN cho TimeSpan.FromMinutes, cung cấp chữ ký phương pháp sau:

public static TimeSpan FromMinutes(double value)

do đó, mã sau 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 thuộc tính TimeSpan.TotalMinutes để thực hiện phép tính này. Ví dụ:

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes;
int wholeMinutes = (int)fractionalMinutes;

3

Bạn chỉ cần truy vấn thuộc TotalMinutestính như thế nàyvarTime.TotalMinutes


1

Nếu sự khác biệt giữa endTime và startTime lớn hơn hoặc bằng 60 Phút , câu lệnh: endTime.Subtract(startTime).Minutes;sẽ luôn trả về (minutesDifference % 60). Rõ ràng điều đó không được 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ố cách nếu bạn muốn lấy total number of minutes(trong các typecast 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; 
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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.