2016-08-26 79 views
2

我显示我的web应用上的在hh:mm:ss格式两个日期之间的差异像小时计数器显示更高。例如使用以下DateTime是否获取日期差>24小时

StartDateTime = 2016-08-25 15:00:00 
EndDateTime = 2016-08-27 15:28:30 

在HH的区别:mm:ss格式应该48:28:30但当前正在显示00:28:30

任何帮助是极大的赞赏

+3

看看这篇文章,如果它可以帮助你http://stackoverflow.com/questions/3505230/format-timespan-greater-than-24-hour –

+0

'seconds.ToString(@“hh \:mm \:ss \:f ff“);'将使用'seconds.Hours'来格式化输出。而你想使用'seconds.TotalHours'。您需要为此编写自己的格式化功能(请参阅上面的链接举例) – oleksii

+1

您将永远无法获得TimeSpan以显示高于23小时的任何数字。查看** Days **属性,并在转换为字符串时添加+24小时 –

回答

3

这样做怎么样?

string duration = 
    String.Format(
     @"{0}:{1:mm\:ss\:fff}", 
     seconds.Days * 24.0 + seconds.Hours, 
     seconds); 
0

像这样的事情?

var StartDateTime = new DateTime(2016, 8, 25, 15, 0, 0); 
var EndDateTime = new DateTime(2016, 8, 27, 15, 28, 30); 

var durationTimeSpan = EndDateTime.Subtract(StartDateTime); 
var duration = 
    (int)durationTimeSpan.TotalHours + ":" + 
    durationTimeSpan.Minutes.ToString("00") + ":" + 
    durationTimeSpan.Seconds.ToString("00"); 

根据需要,“duration”字符串将是“48:28:30”。

1

我想出了一个快速解决方案。但它不是最好的。我只用您的数据进行测试。所以需要一些改进。

var startDateTime = Convert.ToDateTime("2016-08-25 15:00:00"); 
var endDateTime = Convert.ToDateTime("2016-08-27 15:28:30"); 
String.Format("{0}:{1}:{2}", 
      Convert.ToInt32(Math.Round((endDateTime - startDateTime).TotalHours -0.5, MidpointRounding.ToEven)), 
      (endDateTime - startDateTime).Minutes, 
      (endDateTime - startDateTime).Seconds); 
0

或者更时尚的方式:

string duration = String.Format($"{(int)seconds.TotalHours}:{seconds.Minutes}:{seconds.Seconds}"); 

*编辑:而且也更易读

0

很简单:

DateTime startDateTime; 
DateTime.TryParse("2016-08-25 15:00:00", out startDateTime); 
DateTime endDateTime; 
DateTime.TryParse("2016-08-27 15:28:30", out endDateTime); 
TimeSpan span = (endDateTime - startDateTime); 

var durationString = string.Format("{0}:{1}:{2}", (int)span.TotalHours, span.Minutes, span.Seconds);