算法 (C# 时间差) 求 最终时间 endTime 跟 开始时间beginTime 忙时历时的分钟数差(8 点到 23 点 为忙时),谢谢 ! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 啥意思?就是endTime-beginTime在不在8点到23点? 如果beginTime是昨天的7点,endTime是今天的23:30,那你要的结果是什么? 如果是一天之内的,那么:if (beginTime < 8:00:00) beginTime = 8:00:00if (endTime > 23:00:00) endTime = 23:00:00然后计算 endTime - beginTime using System;class Test{ static void Main() { DateTime dt0 = new DateTime(2008, 6, 12, 5, 3, 12); DateTime dt1 = new DateTime(2008, 6, 12, 15, 13, 48); Console.WriteLine(Diff(dt0, dt1)); } static int startHour = 8; // 忙时开始的小时值 static int endHour = 23; // 忙时结束的小时值 static double Diff(DateTime dt0, DateTime dt1) { if (dt0 >= dt1) return 0; if (dt0.Date == dt1.Date) // 同一天 { if (dt0.Hour < startHour) dt0 = new DateTime(dt0.Year, dt0.Month, dt0.Day, startHour, 0, 0); if (dt1.Hour >= endHour ) dt1 = new DateTime(dt1.Year, dt1.Month, dt1.Day, endHour , 0, 0); return (dt1 - dt0).TotalMinutes; } else // 不同天 { // ... } return 0; }} DateTime BeginTime = new DateTime(2008, 1, 1, 8, 0, 0); DateTime EndTime = new DateTime(2008, 1, 1, 23, 0, 0); TimeSpan t= EndTime.Subtract(BeginTime); MessageBox.Show("间隔时间=" + t.TotalMinutes.ToString() + "分钟"); using System;class Test{ static void Main() { DateTime dt0 = new DateTime(2008, 6, 12, 23, 3, 12); DateTime dt1 = new DateTime(2008, 6, 14, 22, 13, 48); Console.WriteLine(Diff(dt0, dt1)); } static int startHour = 8; // 忙时开始的小时值 static int endHour = 23; // 忙时结束的小时值 static double Diff(DateTime dt0, DateTime dt1) { if (dt0 >= dt1) return 0; if (dt0.Hour < startHour) dt0 = new DateTime(dt0.Year, dt0.Month, dt0.Day, startHour, 0, 0); if (dt1.Hour >= endHour ) dt1 = new DateTime(dt1.Year, dt1.Month, dt1.Day, endHour , 0, 0); if (dt0.Date == dt1.Date) // 同一天 { return (dt1 - dt0).TotalMinutes; } else // 不同天 { if (dt0.Hour >= endHour) { dt0 = dt0.AddDays(1); dt0 = new DateTime(dt0.Year, dt0.Month, dt0.Day, startHour, 0, 0); return Diff(dt0, dt1); } if (dt1.Hour < startHour) { dt1 = dt1.AddDays(-1); dt1 = new DateTime(dt1.Year, dt1.Month, dt1.Day, endHour , 0, 0); return Diff(dt0, dt1); } DateTime dt0End = new DateTime(dt0.Year, dt0.Month, dt0.Day, endHour , 0, 0); DateTime dt1Start = new DateTime(dt1.Year, dt1.Month, dt1.Day, startHour, 0, 0); return (dt0End - dt0).TotalMinutes + (dt1 - dt1Start).TotalMinutes + ((dt1.Date - dt0.Date).Days - 1) * (endHour - startHour) * 60; } }} using System;class Test{ static void Main() { DateTime dt0 = new DateTime(2008, 6, 12, 23, 3, 12); DateTime dt1 = new DateTime(2008, 6, 14, 22, 13, 48); Console.WriteLine(Diff(dt0, dt1)); } static int startHour = 8; // 忙时开始的小时值 static int endHour = 23; // 忙时结束的小时值 static double Diff(DateTime dt0, DateTime dt1) { if (dt0 >= dt1) return 0; if (dt0.Hour < startHour || dt0.Hour >= endHour) { if (dt0.Hour >= endHour) dt0 = dt0.AddDays(1); dt0 = new DateTime(dt0.Year, dt0.Month, dt0.Day, startHour, 0, 0); } if (dt1.Hour < startHour || dt1.Hour >= endHour) { if (dt1.Hour < startHour) dt1 = dt1.AddDays(-1); dt1 = new DateTime(dt1.Year, dt1.Month, dt1.Day, endHour, 0, 0); } if (dt0.Date == dt1.Date) // 同一天 { return (dt1 - dt0).TotalMinutes; } else // 不同天 { DateTime dt0End = new DateTime(dt0.Year, dt0.Month, dt0.Day, endHour , 0, 0); DateTime dt1Start = new DateTime(dt1.Year, dt1.Month, dt1.Day, startHour, 0, 0); return (dt0End - dt0).TotalMinutes + (dt1 - dt1Start).TotalMinutes + ((dt1.Date - dt0.Date).Days - 1) * (endHour - startHour) * 60; } }} 顶了学了wuyi8808对了 wuyi8808 强人+好人,呵呵! private void Test(DateTime dtStart, DateTime dtEnd, DateTime dt8, DateTime dt23) { TimeSpan ts1 = dt8 - dtStart; TimeSpan ts2 = dtStart23 - dtEnd; TimeSpan tSpan = dtEnd - dtStart; if (ts1.TotalMinutes > 0) tSpan -= ts1; if (ts2.TotalMinutes > 0) tSpan -= ts2; }对两头的时间差进行下处理就可以了 if (dt0.Date == dt1.Date) // 同一天 { return (dt1 - dt0).TotalMinutes; }要调到 return 0 ,的后面,要么当天的结果是错误的,呵! string dateDiff=null; TimeSpan ts1=new TimeSpan(DateTime1.Ticks); TimeSpan ts2=new TimeSpan(DateTime2.Ticks); TimeSpan ts=ts1.Subtract(ts2).Duration(); dateDiff=ts.Days.ToString()+"天" +ts.Hours.ToString()+"小时" +ts.Minutes.ToString()+"分钟" +ts.Seconds.ToString()+"秒"; 这样可以算时间差,然后剩下的你就可以根据时间差去判断了。 关于vs2010自动创建项目的Login.aspx的登陆按钮 我图片怎么老是被遮住啊 我已经设置了zindex:1了 如何在类中使用FORM窗体中的控件? 填充到datagrid后,我想要1个列隐藏不显示可以吗? 如何消除mainmenu菜单下的横线! [南京程序员俱乐部]:程序员的你生活中找到了另一半了么? 求助求助。winform 图片绘制成图片那样 在一东西,急用.在线等! ado.net的问题 如何遍历窗体上的所有控件! Invoke(delegateMethod)参数计数不匹配 两种格式,哪种更规范呀?
if (endTime > 23:00:00) endTime = 23:00:00
然后计算 endTime - beginTime
{
static void Main()
{
DateTime dt0 = new DateTime(2008, 6, 12, 5, 3, 12);
DateTime dt1 = new DateTime(2008, 6, 12, 15, 13, 48);
Console.WriteLine(Diff(dt0, dt1));
}
static int startHour = 8; // 忙时开始的小时值
static int endHour = 23; // 忙时结束的小时值
static double Diff(DateTime dt0, DateTime dt1)
{
if (dt0 >= dt1) return 0;
if (dt0.Date == dt1.Date) // 同一天
{
if (dt0.Hour < startHour) dt0 = new DateTime(dt0.Year, dt0.Month, dt0.Day, startHour, 0, 0);
if (dt1.Hour >= endHour ) dt1 = new DateTime(dt1.Year, dt1.Month, dt1.Day, endHour , 0, 0);
return (dt1 - dt0).TotalMinutes;
}
else // 不同天
{
// ...
}
return 0;
}
}
DateTime EndTime = new DateTime(2008, 1, 1, 23, 0, 0);
TimeSpan t= EndTime.Subtract(BeginTime);
MessageBox.Show("间隔时间=" + t.TotalMinutes.ToString() + "分钟");
{
static void Main()
{
DateTime dt0 = new DateTime(2008, 6, 12, 23, 3, 12);
DateTime dt1 = new DateTime(2008, 6, 14, 22, 13, 48);
Console.WriteLine(Diff(dt0, dt1));
}
static int startHour = 8; // 忙时开始的小时值
static int endHour = 23; // 忙时结束的小时值
static double Diff(DateTime dt0, DateTime dt1)
{
if (dt0 >= dt1) return 0;
if (dt0.Hour < startHour) dt0 = new DateTime(dt0.Year, dt0.Month, dt0.Day, startHour, 0, 0);
if (dt1.Hour >= endHour ) dt1 = new DateTime(dt1.Year, dt1.Month, dt1.Day, endHour , 0, 0);
if (dt0.Date == dt1.Date) // 同一天
{
return (dt1 - dt0).TotalMinutes;
}
else // 不同天
{
if (dt0.Hour >= endHour)
{
dt0 = dt0.AddDays(1);
dt0 = new DateTime(dt0.Year, dt0.Month, dt0.Day, startHour, 0, 0);
return Diff(dt0, dt1);
}
if (dt1.Hour < startHour)
{
dt1 = dt1.AddDays(-1);
dt1 = new DateTime(dt1.Year, dt1.Month, dt1.Day, endHour , 0, 0);
return Diff(dt0, dt1);
}
DateTime dt0End = new DateTime(dt0.Year, dt0.Month, dt0.Day, endHour , 0, 0);
DateTime dt1Start = new DateTime(dt1.Year, dt1.Month, dt1.Day, startHour, 0, 0);
return
(dt0End - dt0).TotalMinutes
+ (dt1 - dt1Start).TotalMinutes
+ ((dt1.Date - dt0.Date).Days - 1) * (endHour - startHour) * 60;
}
}
}
{
static void Main()
{
DateTime dt0 = new DateTime(2008, 6, 12, 23, 3, 12);
DateTime dt1 = new DateTime(2008, 6, 14, 22, 13, 48);
Console.WriteLine(Diff(dt0, dt1));
}
static int startHour = 8; // 忙时开始的小时值
static int endHour = 23; // 忙时结束的小时值
static double Diff(DateTime dt0, DateTime dt1)
{
if (dt0 >= dt1) return 0;
if (dt0.Hour < startHour || dt0.Hour >= endHour)
{
if (dt0.Hour >= endHour) dt0 = dt0.AddDays(1);
dt0 = new DateTime(dt0.Year, dt0.Month, dt0.Day, startHour, 0, 0);
}
if (dt1.Hour < startHour || dt1.Hour >= endHour)
{
if (dt1.Hour < startHour) dt1 = dt1.AddDays(-1);
dt1 = new DateTime(dt1.Year, dt1.Month, dt1.Day, endHour, 0, 0);
}
if (dt0.Date == dt1.Date) // 同一天
{
return (dt1 - dt0).TotalMinutes;
}
else // 不同天
{
DateTime dt0End = new DateTime(dt0.Year, dt0.Month, dt0.Day, endHour , 0, 0);
DateTime dt1Start = new DateTime(dt1.Year, dt1.Month, dt1.Day, startHour, 0, 0);
return
(dt0End - dt0).TotalMinutes
+ (dt1 - dt1Start).TotalMinutes
+ ((dt1.Date - dt0.Date).Days - 1) * (endHour - startHour) * 60;
}
}
}
学了
wuyi8808对了
{
TimeSpan ts1 = dt8 - dtStart;
TimeSpan ts2 = dtStart23 - dtEnd; TimeSpan tSpan = dtEnd - dtStart;
if (ts1.TotalMinutes > 0)
tSpan -= ts1;
if (ts2.TotalMinutes > 0)
tSpan -= ts2;
}对两头的时间差进行下处理就可以了
if (dt0.Date == dt1.Date) // 同一天
{
return (dt1 - dt0).TotalMinutes;
}
要调到 return 0 ,的后面,要么当天的结果是错误的,呵!
TimeSpan ts1=new TimeSpan(DateTime1.Ticks);
TimeSpan ts2=new TimeSpan(DateTime2.Ticks);
TimeSpan ts=ts1.Subtract(ts2).Duration();
dateDiff=ts.Days.ToString()+"天"
+ts.Hours.ToString()+"小时"
+ts.Minutes.ToString()+"分钟"
+ts.Seconds.ToString()+"秒";
这样可以算时间差,然后剩下的你就可以根据时间差去判断了。