计算经过的时间

Hor*_*ius 3 c# time

我想根据 2 个带有时间戳格式的字符串来计算进程需要执行的经过时间HH:mm:ss:ff。因此,我分割了这些字符串,将它们转换为整数并减去它们。

我尝试的是从第一个时间戳中减去最后一个时间戳。有时它也有效。但我也从中得到了很多奇怪的反馈 - 例如:0:0:-3:-18我认为这是由于如果一个值高于另一个值并且它们被除以不处理该情况的结果。

这是我用来减去字符串的函数:

        static string calculateElapsedTime(string startTime, string endTime)
    {
        try
        {
            string[] startTimeSplit = startZeit.Split(new char[] { ':', '.' });
            string[] endTimeSplit = endZeit.Split(new char[] { ':', '.' });
            int[] elapsedTime = new int[4];

            endTimeSplit[0] = Convert.ToInt32(endTimeSplit[0]) - Convert.ToInt32(startTimeSplit[0]);
            endTimeSplit[1] = Convert.ToInt32(endTimeSplit[1]) - Convert.ToInt32(startTimeSplit[1]);
            endTimeSplit[2] = Convert.ToInt32(endTimeSplit[2]) - Convert.ToInt32(startTimeSplit[2]);
            endTimeSplit[3] = Convert.ToInt32(endTimeSplit[3]) - Convert.ToInt32(startTimeSplit[3]);

            string elapsedTimeString = string.Format("{0}:{1}:{2}:{3}", endTimeSplit[0], endTimeSplit[1], endTimeSplit[2], endTimeSplit[3]);

            return elapsedTimeString;
        }
        catch( Exception ex )
        {
            Console.WriteLine(ex.Message);
            return "null";
        }
    }
Run Code Online (Sandbox Code Playgroud)

我通过简单地获取时间来获取参数的值,如下所示:

DateTime.Now.ToString("HH:mm:ss:ff", System.Globalization.DateTimeFormatInfo.InvariantInfo);
Run Code Online (Sandbox Code Playgroud)

解决方案:

System.Diagnostics 命名空间中有一个名为 Stopwatch 的函数。

您可以按如下方式使用它:

Stopwatch watch = new Stopwatch();
watch.Start();
//Prozess
watch.Stop();
Console.WriteLine(watch.Elapsed);
Run Code Online (Sandbox Code Playgroud)

Fel*_*ani 6

您可以TimeSpan使用正确的值进行转换format并减去它们,例如:

string format = "HH:mm:ss:ffff";
TimeSpan startTimeSpan = TimeSpan.ParseExact(startTime, format, null);
TimeSpan endTimeSpan = TimeSpan.ParseExact(endTime, format, null);

TimeSpan result = startTimeSpan - endTimeSpan;

string elapsedTimeString = string.Format("{0}:{1}:{2}:{3}", 
                                          result.Hours.ToString("00"), 
                                          result.Minutes.ToString("00"),
                                          result.Seconds.ToString("00"),
                                          result.Milliseconds.ToString("00"));

return elapsedTimeString;
Run Code Online (Sandbox Code Playgroud)

查看MSDN 文档中的TimeSpan 格式