首页 新闻 会员 周边

关于计算时间差莫名其妙的问题,当输入时间是当天时间的明天时与现在的时间差结果还是为0,怎么不是1呢?

0
悬赏园豆:5 [已解决问题] 解决于 2008-09-09 10:41

string end = txtYear.Text + '-' + txtMonth.Text + '-' + txtDate.Text+"  00:00:00";

DateTime TimeEnd = Convert.ToDateTime(end),
                TimeStart = DateTime.Now;   
TimeSpan   chargetimespan1;   
                chargetimespan1=TimeEnd-TimeStart;
                 Resultlabel.Text=chargetimespan1.Days.ToString();

当输入时间是当天时间的明天时与现在的时间差结果还是为0,怎么不是1呢?

代码示例的主页 代码示例 | 初学一级 | 园豆:49
提问于:2008-09-08 14:56
< >
分享
最佳答案
0

首先说明下 datetime不是简单类型的数据(不是int double 。。。)

所以要获得时间之差不应该用减号 应该用 Subtract

 

Code

 

其次你认为 1990-1-2 00:00:00 和 1990-1-1 22:00:00的时间之差应该是什么。。。。

小眼睛老鼠 | 老鸟四级 |园豆:2731 | 2008-09-09 02:13
其他回答(3)
0

TimeSpan 的 Days 以小时计(每24小时为1日),它并不能记录并计算起始、终止时间的实际跨度日(人们认识的天数)。你把 txtDate.Text+"  00:00:00" 改为 txtDate.Text+"  23:59:59" 即可。或者改成你说的 Today (那么你所谓的起始时间便是 00:00:00 而不是 Now 的时间)

陛下 | 园豆:3938 (老鸟四级) | 2008-09-08 15:08
0

@codemo

TimeStart = DateTime.Now;
改成
TimeStart = DateTime.Today;
程序正常

 

------------------------

你说的改成了Today就正常了,那是因为你TimeEnd-TimeStart中的TimeStart少了时间数据

TimeStart只有日期时间,而没有了详细的时间,所以timeend-timestart结果是大于24小时,就是1天时间,所以你会获取到days值是1

如果你用了DateTIme.Now,那你timeend-timestart结果是小于24小时,那你的days的值是不大于1的,而是0.

原因就是这些

zjy | 园豆:3194 (老鸟四级) | 2008-09-08 15:59
0

由于没有到24小时,所以为0.

TimeStart 改成这样就可以了。

TimeStart = DateTime.Now.Date;

eaglet | 园豆:17139 (专家六级) | 2008-09-09 08:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册