2012-04-19 103 views
0

我有幾個日期時間的列表。 DateTime實際上是一個HH:mm:ss格式的字符串,我將它轉換爲DateTime。將值計算爲百分比,並根據此值計算其他值

從這個列表中檢索到最大值(分鐘)

我計算總紀要如下所示:

//t is a DateTime 
Double totalMin = TimeSpan.Parse(t.ToString()).TotalMinutes; 

的最大值(以分鐘爲單位),應作爲「100 %「值。 我已經計算了列表的最大值。

含義列表中的所有其他值(也是分鐘)將根據此值計算。 換句話說,其他較低值必須根據此最大值進行縮放。

這將用在條形圖中。所以最大的值將會佔用最多的空間,然後是較低的值。

我到底該怎麼做?

謝謝PeterP。

+2

't1.TimeOfDay.TotalMinutes'將是正確的方式 – V4Vendetta 2012-04-19 08:00:09

+0

百分比= TOTALMIN/100 * someMin – 2012-04-19 08:00:32

+0

在情況下,如果起點12AM)) – Samich 2012-04-19 08:00:33

回答

3

你想知道如何計算一個百分比?用最大值除當前值並乘以100.然後,您可以像想要的那樣格式化百分比(例如「20%」,「20.2%」,...)。

Double max = 200d; 
Double current = 23d; 

Double percent = current/max * 100; 
0

您解析Timespan和轉換DateTime到是不是真的需要一個字符串。

你的意思是這樣的

List<DateTime> lstdt = new List<DateTime>() { 
       new DateTime(2010,5,5,1,10,0), 
       new DateTime(2011,5,5,2,10,0), 
       new DateTime(2010,8,5,1,10,0), 
       new DateTime(2010,5,5,1,10,0), 
       new DateTime(2011,11,5,1,10,0), 
       new DateTime(2010,12,5,1,10,0), 
      };    

double maxval = lstdt.Max(c => c.TimeOfDay.TotalMinutes); 
List<double> lstpercent = lstdt.Select(d1 => d1.TimeOfDay.TotalMinutes/maxval *100.00).ToList<double>(); 
1

時間跨度的區別是,在一定的時間單位,之間兩個日期時間的。你正在解析一個DateTime。你會得到一個出現FormatException:

Double UhOh = TimeSpan.Parse(DateTime.Now.ToString()).TotalMinutes; 

結果:

System.FormatException: "Input string was not in a correct format." 

現在回答你的問題,你會需要另一塊數據:另一個日期時間,以便找到的差異幾分鐘之內,在這兩點之間。

讓我們假設你想使用:

DateTime.Now 

這會工作:

DateTime t = new DateTime(2012,4,19,0,0,0); 
TimeSpan ts = DateTime.Now - t; 
Double mins = ts.TotalMinutes; 

希望有所幫助。 (:

+0

由於它們本來不是DateTime對象,而是hh:mm:ss格式的字符串(通過使用秒錶填充),將它保持爲字符串並使用時間跨度來檢索分鐘數量會更好嗎?謝謝。 – PeterP 2012-04-19 08:20:10

+0

哦,好的!我剛剛看到您的評論,並認爲這是一個DateTime: // t是DateTime(: – darin 2012-04-19 08:32:05