2016-04-12 41 views
3

我有一個包含所花費的時間在hh:mm:ss作爲字符串 像字符串轉換爲DateTime對象,並將其添加到總時間

00:00:40 
00:01:00 
00:02:10 

我想作爲

用戶添加這些值並顯示它的字符串列表
Total Time: 00:03:50 

我可以解析每個時間值的日期時間,但我怎樣才能添加它們來顯示上面的結果顯示。

這裏是我正在解析字符串爲DateTime

foreach(string itm in TimeList) 
{ 
    DateTime sTime = DateTime.ParseExact(itm , "HH:mm:ss", CultureInfo.CurrentCulture); 
} 

回答

6

你解析操作是罰款。但是,您將結果分配給您的sTime,每迭代次數爲,這就是爲什麼您丟失了所有數據,除了最後一個

但更重要的,而不是DateTime,我把它解析到TimeSpan,而不是哪個更好地適合您的數據,因爲它是一個時間間隔

var list = new List<string> 
{ 
    "00:00:40", 
    "00:01:00", 
    "00:02:10" 
}; 

var total = TimeSpan.Zero; 

foreach (var item in list) 
{ 
    total += TimeSpan.ParseExact(item, "hh\\:mm\\:ss", CultureInfo.InvariantCulture); 
} 

現在你可以格式化你的total並顯示給用戶like;

string.Format("Total Time: {0}", 
       total.ToString("hh\\:mm\\:ss", CultureInfo.InvariantCulture)); 

看來ParseExact不可在DOTNET的3.5

然後你可以使用TimeSpan.Parse method這是可用,因爲.NET 1.0版本。但我強烈建議你考慮升級你的框架版本如果你可以。

foreach (var item in list) 
{ 
    total += TimeSpan.Parse(item); 
} 
+0

看來ParseExact不DOTNET的可用3.5,對不起,我忘了提及DotNet Framework。 –

+1

@AdilWaqar沒關係。您可以使用'TimeSpan.Parse'方法,因爲它可用於.NET 1.0版本。但是,爲什麼你要使用.NET 3.5?這是相當古老的。請考慮更新它。 –

+0

是的,它的工作,謝謝,該應用程序已退出它只是一個小的更新, –

0

您可以使用TimeSpan作爲存儲

var spent = TimeSpan.FromTicks(TimeList.Sum(i => TimeSpan.Parse(i).Ticks)); 

然後打印花費的格式

1

你應該用TimeSpan,不DateTime,因爲00:00:40意味着40秒午夜後不40秒。您可以使用的LINQ總結的值:

List<String> times = new List<String>() { 
    "00:00:40", 
    "00:01:00", 
    "00:02:10"}; 

var totalTime = new TimeSpan(times 
    .Select(item => TimeSpan.Parse(item).Ticks) 
    .Sum()); 

// 00:03:50 
Console.Write("Total Time: {0}", totalTime); 
1

嘗試做這種方式:

var TimeList = new [] { "00:00:40", "00:01:00", "00:02:10" }; 

var TotalTime = 
    TimeList 
     .Select(itm => TimeSpan.Parse(itm)) 
     .Aggregate((ts0, ts1) => ts1.Add(ts0)); 

Console.WriteLine("Total Time: {0}", TotalTime); 

這給了我:

 
Total Time: 00:03:50 
相關問題