2016-04-12 39 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 
相关问题