如何使用Timespan获取double值的日期时间差异?

时间:2015-06-03 05:46:32

标签: c# asp.net datetime-format data-conversion

我希望将sqlserver数据库中的DateTime差异保存为double值 但是使用Timespan我只得到了一小时。我希望得到 hh.mm 格式。

我的代码如下:

DateTime starttime = Convert.ToDateTime(date1);
DateTime endtime = Convert.ToDateTime(date2);
TimeSpan span = endtime.Subtract(starttime);
double timedeff=span.Hours;
//Here I getting only hour.I want to this in 'hh.mm' format(double)

3 个答案:

答案 0 :(得分:1)

我假设你想要它以浮点格式,例如xx.yy,其中yy = 0..60对吗?所以你得到10.02,这意味着10:02。

解决方案很简单:

DateTime starttime = Convert.ToDateTime(date1);
TimeSpan diff = Convert.ToDateTime(date2).Subtract(starttime);

double timedef = diff.Hours + diff.Minutes / 100.0;

否则会这样做

double timedef = diff.Hours + diff.Minutes / 60.0;

我想如果你这样做会有一些用处:

var str = timedef.ToString("0.00"); 

......但有更好的方法可以做到这一点。 TimeSpan和DateTime做了很多魔术,如果你真的不需要double,请坚持到最后。

关于固定点的说明

DateTime使用整数来进行数学运算。 Double使用浮点数。根据定义,浮点算法会引入错误;因此,使用整数算术可能更好(也更安全)。

DateTime和Timespan为日期和增量时间操作提供了这一功能。

答案 1 :(得分:0)

假设您希望差异以小时为单位,则将分钟和秒数转换为小时。

double timediff=span.Hours + span.Minutes/60.0 + span.Seconds/(60.0*60.0);

答案 2 :(得分:0)

我不确定你的意思

  

'hh.mm'格式(双)

假设它是这样的:

  

9小时10分钟= 9.10

   DateTime starttime = Convert.ToDateTime(date1);
   DateTime endtime = Convert.ToDateTime(date2);
   TimeSpan span = endtime.Subtract(starttime);
   var datetime = new DateTime(span.Ticks).ToString("H:mm");
   string datetimestring = datetime.ToString().Replace(":",".");
   double timeinDouble =  double.Parse(datetimestring, CultureInfo.InvariantCulture);

如果您想测试不同的方案,请参阅示例项目 - LINK

注意:

  1. 请务必使用“H”而非“h”作为格式说明符,否则小时值0可能会打印为“12”。

  2. 如果经过的时间是例如26个小时,它打印为“02:00”小时。

  3. 如果时间跨度为负,此方法将导致问题。