C#日期时间计算和ToString

C#日期时间计算和ToString,c#,datetime,C#,Datetime,我在做简单的时间计算,看看这个过程已经运行了多长时间 (DateTime.Now - StrtTime).ToString("hh:mm:ss") 其中strtime是:DateTime strtime=DateTime.Now . 但我有一个例外: Input string was not in a correct format. 正确的方法是什么?一个DateTime减去另一个TimeSpan值,而不是另一个DateTime。TimeSpan不支持给定的格式字符串 用于标准TimeSpa

我在做简单的时间计算,看看这个过程已经运行了多长时间

(DateTime.Now - StrtTime).ToString("hh:mm:ss")
其中strtime是:
DateTime strtime=DateTime.Now
. 但我有一个例外:

Input string was not in a correct format.

正确的方法是什么?

一个
DateTime
减去另一个
TimeSpan
值,而不是另一个
DateTime
TimeSpan
不支持给定的格式字符串

用于标准
TimeSpan
格式字符串和自定义格式

但是,为了测量过程时间,您应该使用更适合该任务的工具,
System.Diagnostics.Stopwatch

Stopwatch watch = new Stopwatch();
watch.Start();

DoSomeProcess();

watch.Stop();
TimeSpan processTime = watch.Elapsed;

正如其他人提到的,您可能需要使用秒表。但是,在您的特定情况下,您会收到一个错误,因为您需要转义“:”当使用带有
TimeSpan.ToString
的格式化字符串时。试试这个:

(DateTime.Now - StrtTime).ToString(@"hh\:mm\:ss")
使用秒表类

        Stopwatch sw = new Stopwatch();
        sw.Start();

        //code

        sw.Stop();

        sw.Elapsed.ToString();
试用

Stopwatch stpWatch1 = new Stopwatch();
            stpWatch1.Start();
            .............
            stpWatch1.Stop();
TimeSpan ts = stpWatch1.Elapsed;// it also contains stpWatch1.ElapsedMilliseconds

正如安东尼提到的,秒表更适合这项任务。不过,要回答您的问题,您可以将日期设置为以下格式:

String.Format("{0:hh:mm:ss}", (DateTime.Now - StrtTime).ToString());

正如安东尼所说,减法的结果是
TimeSpan

TimeSpan
接受不同的格式:


我认为您应该使用
秒表(DateTime.Now-strtime),如果strtime也是DateTime,则应返回TimeSpan。恐怕您提供了错误的代码。为了避免使用日期时间算法,您是否看过
System.Diagnostics.Stopwatch
?使用DateTime.Now非常昂贵,而且可能不准确,因为它需要操作系统提供时区信息。如果您的跑步发生在时钟切换到夏令时/从夏令时切换到夏令时时,会发生什么情况?至少,考虑使用<代码> DATETIME。UtcNow < /代码> OK,THNX。现在像这样使用秒表:
String.Format(“{0:00}:{1:00}:{2:00}”),ts.eassed.Hours,ts.eassed.Minutes,ts.eassed.Seconds
其中
ts
stopwatch ts=new stopwatch()
@Oskar Kjellin:使用秒表可能是更好的解决方案,但OP出现了一个错误。我只是解释他为什么会出现这个错误。我提供的格式字符串受TimeSpan支持。请在投票前亲自尝试。对不起,我没有看到msdn上的自定义TimeSpan格式部分:(