计算经过的时间

时间:2014-08-19 11:20:24

标签: c# time

我想根据格式为HH:mm:ss:ff的时间戳的2个字符串计算进程需要执行的已用时间。因此,我拆分了这些字符串,将它们变成一个整数并减去它们。

我尝试的是从第一个时间戳中减去最后一个时间戳。它有时也有效。但是我也从中得到了许多奇怪的反馈 - 例如: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";
        }
    }

通过简单地获取时间,我获得了参数的值:

DateTime.Now.ToString("HH:mm:ss:ff", System.Globalization.DateTimeFormatInfo.InvariantInfo);

SOLUTION:

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

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

Stopwatch watch = new Stopwatch();
watch.Start();
//Prozess
watch.Stop();
Console.WriteLine(watch.Elapsed);

2 个答案:

答案 0 :(得分:3)

您可以使用正确的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;

在MSDN文档中查看TimeSpan Formats

答案 1 :(得分:0)

我遇到了这个,这就是我创建的。如果您愿意,可以添加月份的计算。您也可以使用 total<days, hours...>,但它会破坏代码。生成转换器以转换为 DateTime。它有很大帮助。

public static string TimeElapsed(DateTime start_Time, DateTime end_time)
{
  string result = "";
  var subtractedDate = end_time.Subtract(start_Time);
  if (subtractedDate.Days >= 7)
  {
    var weeks = (int)(subtractedDate.Days / 7);
    if (weeks >= 52)
    {
      var years = (int)(weeks / 52);
      result = $"{years} years ago";
    }
    else
    {
      result = $"{weeks} weeks ago";
    }
   
  }
  else if (subtractedDate.Days > 0 && subtractedDate.Days < 7)
  {
    result = $"{subtractedDate.Days} days ago";
  }
  else
  {
    if (subtractedDate.Hours> 0)
    {
      result = $"{subtractedDate.Hours} hours ago";
    }
    else
    {
      if (subtractedDate.Minutes > 0)
      {
        result = $"{subtractedDate.Minutes} mins ago";
      }
      else
      {
        result = "< 1 min ago";

      }
    }
  }

  return result;
}