C# 跨天过零点后如何求两个时间的差值

t1=DateTime.Parse(dt.Rows[i]["开始时间"].ToString());t2=DateTime.Parse(dt.Rows[i]["结束时间"]... t1 = DateTime.Parse(dt.Rows[i]["开始时间"].ToString());
t2 = DateTime.Parse(dt.Rows[i]["结束时间"].ToString());
System.TimeSpan ND = t2 - t1;
double mm = ND.Minutes;
如上,问题是当开始时间为23:56:57,结束时间为 0:06:57时,所得差值为负数(-50分钟),应该如何求得时间差为10分钟呢?
展开
 我来答
freeeeeewind
推荐于2017-10-03 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1343万
展开全部

这个问题很可能是由于数据库中“开始时间”和“结束时间”两个字段的日期部分(年月日)相同导致的。如果是的话,解决方法如下:

t1 = DateTime.Parse(dt.Rows[i]["开始时间"].ToString());
t2 = DateTime.Parse(dt.Rows[i]["结束时间"].ToString());
System.TimeSpan ND = t2 - t1;
// 用ND .TotalMinutes获取时间差的分钟总数
// 然后用1440(一天有1440分钟)对这个差值取余
double mm = (1440 + ND .TotalMinutes) % 1440;
// mm 的值 10.0
追问
谢谢~~求教要是再加上秒数呢,最后得到相差多少分多少秒,也用同样的办法么?当秒数大于60时,分钟数加1?如何判断?
追答
string d1 = "2015年7月18日 23:56:57";
DateTime t1 = DateTime.Parse(d1);
string d2 = "2015年7月18日 00:06:56";
DateTime t2 = DateTime.Parse(d2);
// 相差的秒数
double ss = (86400 + ND .TotalSeconds) % 86400;  
// 相差:分钟部分
double mm = (int)(ss / 60);
// 相差:秒
ss = (int)(ss % 60);

计算结果为

mm = 9.0

ss = 59.0

及相差9分59秒

----

上面所说的方法虽然可以,但太麻烦了。要彻底解决转日问题,最好在数据库字段上带上日期部分(年月日)。这样可以TimeSpan直接计算出时间差,而且不容易出错!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式