C# 时间跨度加减法

C# 时间跨度加减法,c#,addition,timespan,C#,Addition,Timespan,我需要添加从如下格式的文本框中获取的2个时间跨度:mm:ss.fff 例如: 00:59800+00:02300- 结果应该是01:02.100,但我的结果是01:02060 我想我的转换有以下问题: string Sum1 = "00:" + "00:59,800"; Sum1 = Sum1.Replace(',', '.'); double FSum1 = TimeSpan.Parse(Sum1).TotalSeconds; string Sum2 = "00:" + "00:02,300

我需要添加从如下格式的文本框中获取的2个时间跨度:mm:ss.fff

例如:
00:59800
+
00:02300
- 结果应该是
01:02.100
,但我的结果是
01:02060

我想我的转换有以下问题:

string Sum1 = "00:" + "00:59,800";
Sum1 = Sum1.Replace(',', '.');
double FSum1 = TimeSpan.Parse(Sum1).TotalSeconds;

string Sum2 = "00:" + "00:02,300";
Sum2 = Sum2.Replace(',', '.');
double FSum2 = TimeSpan.Parse(Sum2).TotalSeconds;

double SumResult = FSum1 + FSum2;

maskedTextBoxSumResult.Text = TimeSpan.FromMinutes(SumResult).ToString(@"hh\:mm\:ss\.fff");
同样,我也需要做同样的减法


谢谢您的帮助。

您正在寻找
TimeSpan.ParseExact

  string left = "00:59,800";
  string right = "00:02,300";

  var result = TimeSpan.ParseExact(left, @"mm\:ss\,fff", CultureInfo.InvariantCulture) +
               TimeSpan.ParseExact(right, @"mm\:ss\,fff", CultureInfo.InvariantCulture);

  Console.Write(result.ToString(@"mm\:ss\.fff"));
结果:

  01:02.100

你的许多转换是不必要的。试试这个:

    static  void Main()
    {
        string Sum1 = "00:" + "00:59,800";
        Sum1 = Sum1.Replace(',', '.');
        var FSum1 = TimeSpan.Parse(Sum1);

        string Sum2 = "00:" + "00:02,300";
        Sum2 = Sum2.Replace(',', '.');
        var FSum2 = TimeSpan.Parse(Sum2);

        var SumResult = FSum1 + FSum2;

        var bo  =  SumResult.ToString(@"hh\:mm\:ss\.fff");
        Console.WriteLine(bo);

        Console.ReadLine();
    }
这是我的解决办法

TimeSpan t1 = TimeSpan.Parse(maskedTextBoxSum1.Text);
TimeSpan t2 = TimeSpan.Parse(maskedTextBoxSum2.Text);
TimeSpan t3 = t1.Add(t2);
maskedTextBoxSumResult.Text = t3.ToString(@"hh\:mm\:ss\.fff");

谢谢

您不需要转换为double来求和值

字符串Sum1=“00:”+“00:59800”; 字符串Sum2=“00:”+“00:02300”

TimeSpan-sumResult=TimeSpan.Parse(Sum1)+TimeSpan.Parse(Sum2)


maskedTextBoxSumResult.Text=sumResult.ToString(@“hh:mm:ss.fff”)

不要修改字符串以使其进行分析。请使用正确的文化信息:

string Sum1 = "00:" + "00:59,800";
string Sum2 = "00:" + "00:02,300";

var frfr = new System.Globalization.CultureInfo("fr-FR");

var FSum1 = TimeSpan.Parse(Sum1, frfr);
var FSum2 = TimeSpan.Parse(Sum2, frfr);;

var SumResult = FSum1 + FSum2;
SumResult.ToString(@"hh\:mm\:ss\.fff").Dump();

为什么转换成双倍?直接加上两个时间跨度…你得到我的支持票。其他答案所带来的所有字符串操作都让我的眼睛流血。为什么这里需要
\
呢?Ehsan Sajjad:``正在逃逸:只需跳过
,最后,
独立于区域性…但您正在修改字符串,就在前两行。首先,
字符串Sum1=“00:”+“00:59800”
将编译它,就好像它是由
字符串Sum1=“00:00:59800”
编写的一样。此外,我假设该部分只是按照他必须使用的初始条件进行设置。我假设他的代码实际上是从下一行开始的,在那里他修改了刚刚定义的字符串。