2013-03-26 36 views
5

Có phương pháp tính hiệu quả phần trăm X từ Y, khi cả hai loại dữ liệu là TimeSpan?Phương pháp hiệu quả để tìm phần trăm thời gian

Ví dụ: câu hỏi cơ bản là 1:00:00 là 50% của 2:00:00. Điều gì sẽ là một phương pháp hiệu quả để tính tỷ lệ phần trăm là 00:34:23 của 4:12:31?

+3

là gì '34: 23'? Đó không phải là thời gian hợp lệ? – mattytommo

+2

Bạn có chắc chắn X và Y là cả hai 'DateTime'? Sẽ có ý nghĩa hơn nếu cả hai đều là một 'TimeSpan'. –

+1

@mattytommo Tôi đoán là 34 phút và 23 giây ... –

Trả lời

9

EDIT: Theo nhận xét, các loại thực sự được dự định là TimeSpan thay vì DateTime, tại thời điểm đó mọi thứ đều đơn giản.

Khi bạn hỏi những gì X tỷ lệ là của Y, đó là về cơ bản chia, mà có thể dễ dàng thực hiện trên TimeSpan: Mã

public static double Divide(TimeSpan dividend, TimeSpan divisor) 
{ 
    return (double) dividend.Ticks/(double) divisor.Ticks; 
} 

mẫu:

using System; 
using System.IO; 
using System.Globalization; 
using System.Linq; 

class Test 
{ 
    static void Main() 
    { 
     TimeSpan x = new TimeSpan(0, 34, 23); 
     TimeSpan y = new TimeSpan(4, 12, 31); 
     Console.WriteLine(Divide(x, y)); // 0.13616 etc, i.e. 13% 
    } 

    public static double Divide(TimeSpan dividend, TimeSpan divisor) 
    { 
     return (double) dividend.Ticks/(double) divisor.Ticks; 
    } 
} 
+0

Typo. Tôi có nghĩa là một 'TimeSpan', tôi chỉ có một chút lộn xộn :) –

+0

@Teifi: Phải. Trong trường hợp đó, hãy xem phần còn lại của câu trả lời của tôi - và vui lòng sửa câu hỏi của bạn. (Cần xem xét cẩn thận câu hỏi của bạn trước khi đăng ...) –

+0

Phương pháp 'Scale' là gì? –

7

Sử dụng thuộc tính DateTime.Ticks. Bạn có thể tìm thấy một tỷ lệ phần trăm bằng cách trừ và chia các Số ngày giờ từ eachother. Đây là cách chính xác nhất.

Nếu bạn chỉ sử dụng Thời gian, hãy sử dụng đối tượng TimeSpan thay vì đối tượng DateTime.

+1

Cái gì? Làm thế nào để bạn làm điều này? 'DateTime.Ticks' giữ số khổng lồ lớn hơn vài lần độ lớn sau đó chênh lệch giữa 1 giờ. – Andrey

+1

Sử dụng 'DateTime.Ticks' không có ý nghĩa ở đây. Một 'DateTime' không phải là một tỷ lệ của một DateTime khác, cũng không có ý nghĩa để mở rộng trên' DateTime' bởi bất cứ thứ gì. Về cơ bản, câu hỏi này nên là về 'TimeSpan', không phải' DateTime'. –

+0

Nó có ý nghĩa, đó là biến đo lường thời gian chính xác nhất trong khuôn khổ .NET. Nó được đo xuống đến một phần mười phần triệu giây. Điều này làm cho tỷ lệ phần trăm chính xác hơn và sạch hơn. Câu trả lời ở trên là sử dụng Ticks và bạn đã đăng nó. Tôi cũng dán nhãn cả hai kịch bản khi sử dụng DateTime và TimeSpan. Bạn nên biết khi nào nên sử dụng cả hai. –

2

Thời gian được đo theo đơn vị và bất kỳ lúc nào cũng có thể được chuyển đổi thành số đơn vị đó và sau đó được xử lý như bất kỳ số nào khác. Tạo một số TimeSpan và lấy TotalSeconds và sau đó thực hiện phép tính.

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