建表如下图:特定的假期以及补假都是手动添加到oracle的。求计算N个工作日后的日期,比较过滤掉假期以及过滤掉周末的双休,求大神帮忙啊,要完全实现啊,不要简单思路就完事了...
建表如下图:
特定的假期以及补假都是 手动添加到oracle的。
求计算N个工作日后的日期,比较过滤掉假期以及过滤掉周末的双休,
求大神帮忙啊,要完全实现啊,不要简单思路就完事了~~~
可以直接交流,留下QQ!
忘记说了,用JAVA 代码实现,不用操作数据库,只是从数据库取出来比较 过滤!
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
class MyCalander
{
private int year, month, day;
private Date startDay;
private Vector<Date> holidays;
public MyCalander()
{
startDay = new Date();
holidays = new Vector<Date>();
}
public void SetStartDay(String str)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
try {
startDay = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
}
public void SetHoliday(String str)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date hd = new Date();
try {
hd = sdf.parse(str);
holidays.add(hd);
} catch (ParseException e) {
e.printStackTrace();
}
}
public void GetWorkDay(int n)
{
Calendar calendar = Calendar.getInstance();
Date cursorDay = startDay;
for(int i = 0; i < n; i++)
{
calendar.setTime(cursorDay);
do{
calendar.add(Calendar.DATE, 1);
cursorDay = calendar.getTime();
}while(calendar.get(Calendar.DAY_OF_WEEK) == 1 ||
calendar.get(Calendar.DAY_OF_WEEK) == 7 ||
holidays.contains(calendar.getTime()));
}
System.out.println("The day is :" + cursorDay);
}
}
public class test
{
public static void main(String [] args)
{
MyCalander myCalander = new MyCalander();
myCalander.SetStartDay("2013/2/25");
myCalander.SetHoliday("2013/3/11");
myCalander.SetHoliday("2013/3/8");
/************************************************
* connect database and set holidays here.
* for(...)
* myCalander.SetHoliday("yyyy/mm/dd");
***********************************************/
myCalander.GetWorkDay(10);
}
执行结果:
C:\>java test
The day is :Wed Mar 13 00:00:00 JST 2013
你这个算法 我测试了不对啊!
public static void main(String[] args) {
MyCalander myCalander = new MyCalander();
myCalander.SetStartDay("2013/1/4");
myCalander.SetHoliday("2013/1/5");
myCalander.GetWorkDay(1);
}
4号开始 工作天数 一天,假期为5号,测试结果为7号。
怎么就到7号了呢!
额。。你看看日历,5号6号是周末,所以就直接到7号了。。。
本回答被提问者和网友采纳