格式化两个DateTime对象之间的差异时间

时间:2015-08-13 08:50:46

标签: c# .net datetime

我有两个DateTime个对象 - StartDateEndDate 我想格式化两个日期之间的差异,例如HH:mm:ss

EndTime.Subtract(StartDate).Hours + ":" +
EndTime.Subtract(StartDate).Minutes + ":" +
EndTime.Subtract(StartDate).Seconds

这很好但看起来很丑,我试过这样:

EndTime.Subtract(StartDate).ToString("HH:mm:ss")

但这引发了例外:

  

输入字符串的格式不正确

我做错了什么? 我想要这样的格式 - 01:55:23

5 个答案:

答案 0 :(得分:4)

试试这个。

EndTime.Subtract(StartDate).ToString("hh\\:mm\\:ss");

根据MSDN:https://msdn.microsoft.com/en-us/library/ee372287(v=vs.110).aspx

  

自定义TimeSpan格式说明符不包括占位符分隔符符号,例如将小时数与小时数,小时数与分数小时数或秒数与小数秒数分隔开的符号。相反,这些符号必须作为字符串文字包含在自定义格式字符串中。例如,“dd.hh:mm”将句点(。)定义为天和小时之间的分隔符,并将冒号(:)定义为小时和分钟之间的分隔符。

因此,要使用“:”作为分隔符,必须在其前面加上“\”。

答案 1 :(得分:1)

(EndTime - StartTime).ToString();

DateTime中减去DateTime会产生一个TimeSpan对象,该对象提供.ToString(),可以根据您的需要对其进行格式化。请参阅TimeSpan.ToString()

您还可以通过提供记录格式here(标准格式字符串)和here(自定义格式字符串)来指定所需格式。

鉴于你只想要hh:mm:ss,默认的.ToString()就是这样。

答案 2 :(得分:1)

因为没有" HH"格式。试试" H"或者" hh"。 MSDN

答案 3 :(得分:0)

您可以使用以下格式"dd\\:hh\\:mm\\:ss"

string str = endtime.Subtract(startime).ToString("dd\\:hh\\:mm\\:ss");

答案 4 :(得分:0)

(endTime - startTime).ToString("dd'd 'hh'h 'mm'm 'ss's'");

输出如下所示的可读字符串:

38d 22h 58m 50s

请注意,要在各部分之间留有空格,空格也必须用单引号引起来,例如'm '