需要根据后台数据库所设置的工作时间(比如上午8:00-12:00,下午3:00-6:00),周工作日(比如周一到周五),节假日(10.1-10.7)等等,输入时间段,得到一个时间点,比如在9.30下午5:50输入两个小时,系统会自动把时间算到10.8上午9:50
在哪可以找到这样的算法?或是代码?
能提供一个有效连接就可以了,或是应该在google里输入什么单词才能找到相关信息?
在哪可以找到这样的算法?或是代码?
能提供一个有效连接就可以了,或是应该在google里输入什么单词才能找到相关信息?
{
int weekNum = 0;
DataTable weekTable = new DataTable();
weekTable.Columns.Add("week");
weekTable.Columns.Add("firstday");
weekTable.Columns.Add("lastday"); int d = Convert.ToInt32(DateTime.DaysInMonth(datetime.Year,datetime.Month));//某月的天数
int lastday;
if((datetime.Month-1)>0)
{
lastday = Convert.ToInt32(DateTime.DaysInMonth(datetime.Year,(datetime.Month-1)));//某月上个月的天数
}
else
{
lastday = Convert.ToInt32(DateTime.DaysInMonth((datetime.Year-1),12));//某月上个月的天数
}
int y = Convert.ToInt32(datetime.Year.ToString());
int m = Convert.ToInt32(datetime.Month.ToString());
DateTime firstWeekMonday =new DateTime() ;
DateTime firstWeekSunday = new DateTime();
string weekday = Convert.ToDateTime(y+"-"+m+"-"+"01").DayOfWeek.ToString();
//判断某个月的第一周的周一和周五的具体时间
switch(weekday)
{
case "Monday":
firstWeekMonday = Convert.ToDateTime(y+"-"+m+"-"+"01");
firstWeekSunday = Convert.ToDateTime(y+"-"+m+"-"+"07");
break;
case "Tuesday":
firstWeekMonday = Convert.ToDateTime(y+"-"+(m-1)+"-"+lastday);
firstWeekSunday = Convert.ToDateTime(y+"-"+m+"-"+"06");
break;
case "Wednesday":
firstWeekMonday = Convert.ToDateTime(y+"-"+(m-1)+"-"+(lastday-1));
firstWeekSunday = Convert.ToDateTime(y+"-"+m+"-"+"05");
break;
case "Thursday":
firstWeekMonday = Convert.ToDateTime(y+"-"+m+"-"+"05");
firstWeekSunday = Convert.ToDateTime(y+"-"+m+"-"+"11");
break;
case "Friday":
firstWeekMonday = Convert.ToDateTime(y+"-"+m+"-"+"04");
firstWeekSunday = Convert.ToDateTime(y+"-"+m+"-"+"10");
break;
case "Saturday":
firstWeekMonday = Convert.ToDateTime(y+"-"+m+"-"+"03");
firstWeekSunday = Convert.ToDateTime(y+"-"+m+"-"+"09");
break;
case "Sunday":
firstWeekMonday = Convert.ToDateTime(y+"-"+m+"-"+"02");
firstWeekSunday = Convert.ToDateTime(y+"-"+m+"-"+"08");
break;
default:
break;
}
// 第一周的具体时间
weekTable.Rows.Add(weekTable.NewRow());
weekTable.Rows[weekNum]["week"] = 1;
weekTable.Rows[weekNum]["firstday"] = firstWeekMonday.ToString("yyyy-MM-dd");
weekTable.Rows[weekNum]["lastday"] = firstWeekSunday.ToString("yyyy-MM-dd");
// 最后一周前的几周时间
for(int i = Convert.ToInt32(firstWeekSunday.Day+7);i<d;i+=7)
{
weekNum = weekNum + 1;
weekTable.Rows.Add(weekTable.NewRow());
weekTable.Rows[weekNum]["week"] = weekNum+1;
weekTable.Rows[weekNum]["firstday"] = Convert.ToDateTime(y+"-"+m+"-"+(i-6)).ToString("yyyy-MM-dd");
weekTable.Rows[weekNum]["lastday"] = Convert.ToDateTime(y+"-"+m+"-"+i).ToString("yyyy-MM-dd");
}
int finalDay = Convert.ToInt32(Convert.ToDateTime(weekTable.Rows[weekNum]["lastday"]).Day);//某个月倒数第二周的上周日
// 最后一周的具体时间
//判断某个月的最后一周是在本月还是在下个月 if(d-finalDay>=3)
{
weekNum = weekNum + 1;
weekTable.Rows.Add(weekTable.NewRow());
weekTable.Rows[weekNum]["week"] = weekNum+1;
weekTable.Rows[weekNum]["firstday"] = Convert.ToDateTime(y+"-"+m+"-"+(finalDay+1)).ToString("yyyy-MM-dd");
if((7-(d-finalDay)) == 0)
{
weekTable.Rows[weekNum]["lastday"] = Convert.ToDateTime(y+"-"+m+"-"+d).ToString("yyyy-MM-dd");
}
else
{
if(m == 12)
{
weekTable.Rows[weekNum]["lastday"] = Convert.ToDateTime((y+1)+"-"+1+"-"+(7-(d-finalDay))).ToString("yyyy-MM-dd");
}
else
{
weekTable.Rows[weekNum]["lastday"] = Convert.ToDateTime(y+"-"+(m+1)+"-"+(7-(d-finalDay))).ToString("yyyy-MM-dd");
}
}
}
return weekTable;
}
这是我自己写的随便输入一个日期就能把这个月的所有周一和周日的日期都显示出来的
可能效率不是很高。希望能有人指点一下
---|---工作-----|--非工作--|------工作-------|---非工作---|
x[i] x[i+1] x[i+2] x[i+3]
输入的时间|<-|~~~~~~~~~~|--->|
t1 t2
t1+t2就是2小时,9月30日18:00减17:50=t1=10分钟,2小时减t2=1小时50分,x[i+1]的截止时间+1小时50分就是t2结束的时间。
当然还要考虑t1、t2 跨越一个x的情况,终究比较麻烦