这东西正好我也做过,不过方法比较土呵呵,我用了java核心编程那本书附带的一个类
corejava.Day, 很容易使用。
先new 两个Day出来,然后第一个Day不断前进,Day.advance(1),碰到周六周末略去,一直比较到后一个Day为止(*&^
corejava.Day, 很容易使用。
先new 两个Day出来,然后第一个Day不断前进,Day.advance(1),碰到周六周末略去,一直比较到后一个Day为止(*&^
解决方案 »
- 求助:关于继承与调用的问题!
- 如何用位操作求余
- 如何实现跨JVM应用?如何同一JVM实现多类装载器?
- ThreadLocal 问题
- 想用JAVA实现哈夫曼树的值,如输入1,3,5,7,9。求哈夫曼树的值,如1为11110,9为0。
- 各位高人,怎样设置一个JButton的事件,使得用默认浏览器(ie或者firefox),打开一个已经储存的网页呢?
- 如何制作一个像jbuilder里边运行相类似的按钮
- 这次csdn故障修复后感觉我的专家分、可用分和一些已发的帖子都产生了变化。
- 一个PACKAGE问题
- java人脸识别 错误
- javaapplet 提交的问题!(设置框架)
- StringBuffer使用疑惑
public int getDays(Date sd,Date ed){
return (ed.getTime() - sd.getTime()) / (24*3600*1000)
} 这样要是再想去掉节假日就麻烦了
c1,c2之间有多少天:
public int dayDiff(GregorianCalendar c1, GregorianCalendar c2){
if((c1.get(Calendar.YEAR)==c2.get(Calendar.YEAR)) &&
(c1.get(Calendar.DAY_OF_YEAR)==c2.get(Calendar.DAY_OF_YEAR)))
return 0;
else
return (int)
Math.ceil((Math.abs(c1.getTimeInMillis()-c2.getTimeInMillis()))/(1000*24*3600.0));
}
Date date2 = c2.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String str1 = sdf.format(date1);
String str2 = sdf.format(date2);
date1 = sdf.parse(str1);
date2 = sdf.parse(str2);
int nDays = Math.abs((date2.getTime - date1.getTime)/(24 * 60 * 60 *1000));
boolean isWeekEnd(Calendar)
boolean isHoliday(Calendar)
int getWeekEndCount(Calendar,Calendar)
int getHolidayCount(Calendar,Calendar)
int getValidDayCount(Calendar,Calendar)
c0.set(2003,11,14);
Calendar c1=Calendar.getInstance();
c1.set(2002,11,14);
//-----求两个Calendar: c0,c1相差的天数
Date ddd1=c0.getTime();
Date ddd2=c1.getTime();
long d=ddd1.getTime()-ddd2.getTime();
d=d/3600/24/1000; // 毫秒--->天数
c1:2003-11-20-18:23:23
c2:2003-11-20-00:01:00
c1-c2=0c1:2003-11-20-18:23:23
c2:2003-11-21-00:01:00
c2-c1=1Test if your algo is right
if(c1.after(c2))
return workDayDiff(c2,c1);
int offset=(dayDiff(c1,c2) % 7)*5;int dw2=c2.get(Calendar.DAY_OF_WEEK);
int dw1=c1.get(Calendar.DAY_OF_WEEK);
....
首先计算出时间差,以天为单位;整除7得到工作周;关键是剩下那几天的计算,具体算法见测试程序。测试用源代码如下:
import java.util.Calendar;public class Test {
public static void main(String args[]){
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
long millisPerDay = 1000 * 60 * 60 * 24;
long diff = millisPerDay * 8;
c1.setTimeInMillis(System.currentTimeMillis() - diff );
c2.setTimeInMillis(System.currentTimeMillis());
long diffInMilliseconds = c2.getTimeInMillis() - c1.getTimeInMillis();
long diffInDays = diffInMilliseconds / (1000 * 60 * 60 * 24) ;
long diffInWeeks = diffInDays / 7;
long workDays = diffInDays / 7 * 5;
/* 剩下几天的算法 */
long rem = diffInDays % 7;
int curDayInWeek = c2.get(Calendar.DAY_OF_WEEK);
if (rem <= curDayInWeek - Calendar.SUNDAY)
workDays += rem;
else if (rem <= curDayInWeek - Calendar.SUNDAY + 2)
workDays += curDayInWeek - Calendar.SUNDAY;
else
workDays += rem - 2;
System.out.println("days:\t" + diffInDays);
System.out.println("workdays:\t" + workDays);
}
}