当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: declare @provinceid int set @provinceid=select provinceid from province where 省份名称 = xxx 这么写不行。怎么写一下 ......
 ·帮忙……    »显示摘要«
    摘要: 想运营一款游戏,浙江地区的,游戏公司说凡浙江地区ip的用户都属于我这边 但早上游戏公司给我一份浙江地区的ip号段,相当复杂,如下 58.87.64.0 58.87.127.255 浙江省温州市 广电网 58.100.0.0 58.100.162.255 浙江省杭州市 网通 58.100.163.0 58.100.191.255 浙江省杭州市 (拱墅区/西湖区)网通 58.100.192.0......


咨询一个算法

需要根据后台数据库所设置的工作时间(比如上午8:00-12:00,下午3:00-6:00),周工作日(比如周一到周五),节假日(10.1-10.7)等等,输入时间段,得到一个时间点,比如在9.30下午5:50输入两个小时,系统会自动把时间算到10.8上午9:50  
  在哪可以找到这样的算法?或是代码?  
  能提供一个有效连接就可以了,或是应该在google里输入什么单词才能找到相关信息?

NO.1   作者: lovvver

不明白你说的算法,感觉乱七八糟的。  
  能否说的明白点。  
  感觉这好象不是什么难题。

NO.2   作者: jinjazz

用sql函数很容易实现的吧

NO.3   作者: zyspp

没看明白

NO.4   作者: sdd330

看不懂啊大哥,这个算法做啥应用的?

NO.5   作者: pupo

上班   打卡   系统    
   
  搜索看看

NO.6   作者: tclin

先判断那天的上班时间,如果按要求的时间加上去后超出的话就跳到下一天。

NO.7   作者: Surprise00

//算出一个月的每一周的周一和周日  
   
  private   DataTable   GetWeek(DateTime   datetime)  
  {  
  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;  
  }  
   
   
  这是我自己写的随便输入一个日期就能把这个月的所有周一和周日的日期都显示出来的  
  可能效率不是很高。希望能有人指点一下  
 

NO.8   作者: syeerzy

判断指定的时间是否是工作时间,寻找指定的时间以后的n个中断点,如果指定的时间是工作时间,n取偶数,否则取奇数,我觉得是关键。  
   
  如楼主举的例子中指定的时间是工作时间,n=2   寻找,9月30日下午5点半之后的2个中断点  
   
  然后n为奇数的话把指定的时间也作为中断点,使n变成偶数,然后循环用第2i个中断点减2i-1个中断点的时间累加。如上例用   10月8日上午8点减9月30日下午6点,得到差。  
   
  最后是加法,可以得到最后结果。

NO.9   作者: zhaoliang_chen

mark

NO.10   作者: charlie36

up

NO.11   作者: sarcophile

这个问题比较难,估计很难搜到  
   
  想了半天,没什么太好的办法,随便说一下,抛砖引玉吧  
   
  用一个专用的函数,建一个数据结构,该结构是永久性的,只要工作时间的设定不改变,该结构就不用改变。该结构是x的一个数组class   x{   DateTime   截止时间;   bool   是工作时间};每次工作时间和非工作时间交替,生成一个新的x实例。从以前到以后,生成一个x[]  
   
  用的时候在x[]中搜索输入的时间,如果搜到的x[i]是工作时间,就从小时数中减去,当然,要做很多判断,比较麻烦,弄个图吧  
  ---|---工作-----|--非工作--|------工作-------|---非工作---|  
                  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的情况,终究比较麻烦


 ·jsp的一个小问题    »显示摘要«
    摘要: <%@ page language="java" contenttype="text/html; charset=gb2312" %> <% //取得当前的年,月,日等,注意返回的是整型 java.util.date a=new java.util.date(); int year=a.getyear(); year+=1900; ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE