计算日期并从列表中返回日期格式0:0:0的总和

时间:2019-05-15 05:47:38

标签: c#

enter image description here

我有一个名为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,我在列表中增加了价值,但我不知道如何获取列表中所有时间的总和。而且它只是一个时间而不包含日期。

请帮助我解决问题。

5 个答案:

答案 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)