隐藏

C#中计算时间差

发布:2022/2/8 22:32:56作者:管理员 来源:本站 浏览次数:682

问题:


startTime = DateTime.Now;            

-----------

slExecutedTime.Text = (DateTime.Now - startTime).ToString();

执行结果:

已执行:00:00:03.1234434(后面会多出很多的小数位)

想要的执行结果:

已执行:00:00:03


解决方案一(推荐):


TimeSpan的相关属性:

复制代码


相关属性和函数

Add:与另一个TimeSpan值相加。

Days:返回用天数计算的TimeSpan值。

Duration:获取TimeSpan的绝对值。

Hours:返回用小时计算的TimeSpan值

Milliseconds:返回用毫秒计算的TimeSpan值。

Minutes:返回用分钟计算的TimeSpan值。

Negate:返回当前实例的相反数。

Seconds:返回用秒计算的TimeSpan值。

Subtract:从中减去另一个TimeSpan值。

Ticks:返回TimeSpan值的tick数。

TotalDays:返回TimeSpan值表示的天数。

TotalHours:返回TimeSpan值表示的小时数。

TotalMilliseconds:返回TimeSpan值表示的毫秒数。

TotalMinutes:返回TimeSpan值表示的分钟数。

TotalSeconds:返回TimeSpan值表示的秒数。


复制代码

复制代码


/// <summary>

       /// 程序执行时间测试

       /// </summary>

       /// <param name="dateBegin">开始时间</param>

       /// <param name="dateEnd">结束时间</param>

       /// <returns>返回(秒)单位,比如: 0.00239秒</returns>

       public static string ExecDateDiff(DateTime dateBegin, DateTime dateEnd)

       {

           TimeSpan ts1 = new TimeSpan(dateBegin.Ticks);

           TimeSpan ts2 = new TimeSpan(dateEnd.Ticks);

           TimeSpan ts3 = ts1.Subtract(ts2).Duration();

           //你想转的格式

           return ts3.TotalMilliseconds.ToString();

       }


复制代码


这是最基本的,得到的是毫秒数

如果你是只单纯的需要你的那种格式完全可以直接取前10位就行了


   ts3.ToString("g")   0:00:07.171

   ts3.ToString("c")   00:00:07.1710000

   ts3.ToString("G")   0:00:00:07.1710000


有三种格式可以选择,我建议如果需要其实一种的时候可以使用截取的试比较快捷

比如


ts3.ToString("g").Substring(0,8)   0:00:07.1

ts3.ToString("c").Substring(0,8)   00:00:07

ts3.ToString("G").Substring(0,8)   0:00:00


方案二:较繁琐

复制代码


#region 返回时间差

       public static string DateDiff(DateTime DateTime1, DateTime DateTime2)

       {

           string dateDiff = null;

           try

           {

               TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);

               TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);

               TimeSpan ts = ts1.Subtract(ts2).Duration();

               string hours = ts.Hours.ToString(), minutes = ts.Minutes.ToString(),seconds = ts.Seconds.ToString();

               if(ts.Hours<10)

               {

                   hours = "0" + ts.Hours.ToString();

               }

               if (ts.Minutes<10)

               {

                   minutes = "0" + ts.Minutes.ToString();

               }

               if(ts.Seconds<10)

               {

                   seconds = "0" + ts.Seconds.ToString();

               }

               dateDiff = hours + ":"+ minutes + ":"+ seconds;

           }

           catch

           {


           }

           return dateDiff;

       }

       #endregion


复制代码