2013-03-26 14 views
5

Gibt es eine effiziente Methode zur Berechnung des Prozentsatzes von X von Y, wenn beide Datentypen TimeSpan sind?Effiziente Methode zum Finden eines Prozentsatzes der Zeit

ZB wäre eine grundlegende Frage, dass 1:00:00 50% von 2:00:00 ist. Was wäre eine effektive Methode zur Berechnung, wie viel Prozent von 4:12:31 ist?

+3

Was ist '34: 23'? Das ist keine gültige Zeit? – mattytommo

+2

Sind Sie sicher, dass X und Y beide eine 'DateTime' sind? Wäre sinnvoller, wenn beide ein "TimeSpan" wären. –

+1

@mattytommo Ich denke, es ist 34 Minuten und 23 Sekunden ... –

Antwort

9

BEARBEITEN: Laut dem Kommentar, die Typen sind eigentlich TimeSpan anstatt DateTime, zu welchem ​​Zeitpunkt alles einfach ist.

Wenn Sie fragen, welchen Anteil X von Y ist, das ist im Grunde Division, die sich leicht auf TimeSpan implementiert:

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

Beispielcode:

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. Ich meinte eine 'TimeSpan', ich bin nur ein bisschen durcheinander :) –

+0

@Teifi: Richtig. In diesem Fall, sehen Sie den Rest meiner Antwort - und bitte beheben Sie Ihre Frage. (Es lohnt sich, Ihre Frage sorgfältig zu lesen, bevor Sie sie veröffentlichen ...) –

+0

Für was ist die 'Scale' Methode? –

7

Verwenden Sie die DateTime.Ticks-Eigenschaft. Sie können einen Prozentsatz finden, indem Sie die DateTime-Ticks voneinander subtrahieren und dividieren. Dies ist der genaueste Weg.

Wenn Sie nur eine Zeit verwenden, verwenden Sie das TimeSpan-Objekt anstelle des DateTime-Objekts.

+1

Was? Wie machst Du das? 'DateTime.Ticks' enthält eine gigantische Zahl, die mehrere Größenordnungen größer ist als der Unterschied zwischen 1 Stunde. – Andrey

+1

Die Verwendung von 'DateTime.Ticks' macht hier keinen Sinn. Eine 'DateTime' ist keine Proportion zu einer anderen, noch macht es Sinn, bei' DateTime' nach irgendetwas zu skalieren. Grundsätzlich sollte diese Frage über "TimeSpan", nicht über "DateTime" sein. –

+0

Es macht Sinn, es ist die genaueste Zeit Messgröße im .NET-Framework. Es wird bis auf eine Zehnmillionstelsekunde gemessen. Dies macht den Prozentsatz genauer und sauberer. Die obige Antwort benutzt auch Ticks und du hast es gepostet. Ich beschriftete auch beide Szenarien bei der Verwendung von DateTime und TimeSpan. Sie sollten wissen, wann beide zu verwenden sind. –

2

Die Zeit wird in Einheiten gemessen und jede Zeit kann in Anzahl dieser Einheiten umgewandelt und dann wie jede andere Zahl verarbeitet werden. Erstellen Sie eine TimeSpan und nehmen Sie TotalSeconds und dann tun Sie die Mathematik.

Verwandte Themen