2009-09-10 115 views
8

我想獲得一個TimeSpan與另一個TimeSpan的比率(基本上是從總時間中播放視頻的進度)。我目前的方法是獲取兩個TimeSpan對象的毫秒數並將一個對另一個進行分割。例如:劃分兩個TimeSpan對象的最佳方式是什麼?

 int durationInMilliseconds = totalTimeSpan.Milliseconds; 
     int progressInMilliseconds = progressTimeSpan.Milliseconds; 

     Double progressRatio = progressInMilliseconds/durationInMilliseconds; 

是否有更直接的路線?這是一個簡單的問題,我只是好奇,如果有一個超級優雅的方式來解決它。

乾杯所有 詹姆斯

回答

16

您應該使用TicksTotalMilliseconds,根據所需的精度。 Milliseconds是當前秒數的毫秒數。

至於更好的解決方案,它沒有什麼比一個師簡單所以你當前的解決方案是好的(減去的bug)。

+0

@Richard紹洛伊得到正如我所知,他首先發布瞭解決方案。 – 2009-09-10 15:04:10

17
double progressRatio = progressTimeSpan.Ticks/(double)totalTimeSpan.Ticks; 

您必須投一個到一個double,否則C#將做整數除法。 Ticks比TotalMilliseconds更好,因爲它是如何存儲並避免任何轉換的。

+0

+1進行轉換。 – 2009-09-10 14:09:39

+0

@JDunkerley:轉換問題無關緊要:您正在調用'Ticks',然後自己轉換爲'double'。調用'TotalMilliseconds'只是意味着在方法內完成到'double'的轉換。 'Ticks'比'TotalMilliseconds'具有更高的準確性,這通常是使用它的一個很好的理由,但在這種情況下,我們只是在計算一個比率。 – LukeH 2009-09-10 14:36:18

+0

我的意思是TimeSpan存儲在Ticks中,並且在返回到函數之前需要先轉換爲MilliSeconds。無可否認,這是一個非常快速的操作,計算成本基本爲零,但將Tick劃分而不是轉換爲MS並劃分它們會更有效。 – JDunkerley 2009-09-10 14:40:15

0

TimeSpan獲得了幾個新的運營商.NET核2.0發佈:

public TimeSpan Divide(double divisor); 
public double Divide(TimeSpan ts); 
public TimeSpan Multiply(double factor); 

public static TimeSpan operator /(TimeSpan timeSpan, double divisor); 
public static double operator /(TimeSpan t1, TimeSpan t2); 
public static TimeSpan operator *(double factor, TimeSpan timeSpan); 
public static TimeSpan operator *(TimeSpan timeSpan, double factor); 

值得注意的是,一個TimeSpan現在可以通過另一種TimeSpan分爲:

var a = new TimeSpan(10, 0, 0); 
var b = new TimeSpan(0, 30, 0); 
var c = new TimeSpan(0, 4, 30); 

Console.WriteLine(a/b); 
// Displays: "20" 

Console.WriteLine(b/c); 
// Displays: "6.66666666666667" 
相關問題