我希望将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)
答案 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
注意:
请务必使用“H”而非“h”作为格式说明符,否则小时值0可能会打印为“12”。
如果经过的时间是例如26个小时,它打印为“02:00”小时。
如果时间跨度为负,此方法将导致问题。