我有一个名为IdleList的列表,该列表具有多个日期,如图像中所示,包含日期的列表可以大于5,并且我想要日期的总和,例如 0:0:11 + 0:0:14 = 0:0:25。
这是我的清单
List<string> IdleList = new List<string>();
string mm = ts.ToString(@"h\:m\:s");
IdleList.Add(mm);
ts是TimeSpan,我在列表中增加了价值,但我不知道如何获取列表中所有时间的总和。而且它只是一个时间而不包含日期。
请帮助我解决问题。
答案 0 :(得分:4)
我强烈建议您存储TimeSpan
列表而不是string
列表,并始终使用TimeSpan
。仅在需要将其输出给用户时才转换为字符串。
如果您无法控制字符串列表,则可以将其转换为如下所示的时间跨度:
var timeSpans = IdleList.Select(x => TimeSpan.ParseExact(x, "h\\:m\\:s", CultureInfo.InvariantCulture));
然后计算它们的总和...
var sum = timeSpans.Aggregate(TimeSpan.Zero, (x, y) => x.Add(y));
并打印出来:
Console.WriteLine(sum.ToString("h\\:m\\:s"));
答案 1 :(得分:1)
最好将这些项目存储在“时间跨度列表”中。
但是,如果需要将值作为字符串,则可以使用以下代码将字符串转换为TimeSpan并计算总和:
TimeSpan sum = new TimeSpan();
for (int i=0;i< IdleList.Count; i++)
{
sum += TimeSpan.Parse(IdleList[i]);
}
答案 2 :(得分:0)
请尝试这个。
List<string> objList = new List<string>();
objList.Add("0:0:10");
objList.Add("0:0:10");
objList.Add("1:1:10");
objList.Add("0:3:10");
TimeSpan CurrTime;
DateTime CurrDate = new DateTime();
foreach (var item in objList)
{
if (TimeSpan.TryParse(item, out CurrTime))
{
CurrDate = CurrDate.Add(CurrTime);
}
}
Console.Write(CurrDate.ToString());
答案 3 :(得分:0)
将所有字符串项转换为TimeSpan并进行汇总。这样。
var timeSpan = new List<string> {"0:0:14", "0:0:2", "0:0:4"}.Select(TimeSpan.Parse).Aggregate((k, v) => k + v);
答案 4 :(得分:-2)
首先,您需要像这样将它们转换为DateTime:
DateTime myDate = DateTime.Parse(dateString);
然后您可以执行以下操作:
long ticks=myDate.Ticks;
然后您可以添加所有的价格变动并将其转换回日期时间:
DateTime datetime= new DateTime(ticks);
否则,如果要保留字符串并仅添加最后一部分,则需要执行以下操作:
var list = new List<string>(){
"00:00:11",
"00:00:14"
};
var results = list.Select(x=>int.Parse((x.Split(':')[2]))).Sum(); //Result will be 25 in this case.
当然,更好的选择是像这样使用Timespan:
TimeSpan time = TimeSpan.Parse("00:00:11");
然后在循环中添加所有这样的时间跨度。
time.Add(Your next time span)