Java的Date里,加天数的时候怎么忽略星期六和星期天?

core_taeki 2011-01-15 04:39:41
Java的Date里,加天数的时候怎么忽略星期六和星期天?


最近工作中遇到这个问题,我看了Java的API,和common.lang工具包,都没有相应的方法,请各位高手指教一下。

万分感谢

...全文
642 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
BearKin 2011-01-25
  • 打赏
  • 举报
回复
对不起 即使指定特殊天数也不用循环 代码随后奉上。。不过应该先完成工作的说..
BearKin 2011-01-25
  • 打赏
  • 举报
回复
package date;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Test {
public static DateFormat format = new SimpleDateFormat("yyyy-MM-dd");

public static void main(String[] args) throws Exception {
Date weekend = format.parse("2011-01-21");
Date workday = format.parse("2011-01-13");

System.err.println(format.format(addWorkingDays(weekend, 1)));
System.err.println(format.format(addWorkingDays(workday, 9)));
}

/**
* 增加工作日(休息日周五周六...别扭..)
*
* @param days
* @return
*/
public static Date addWorkingDays(Date startDate, int days) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
if (calendar.get(Calendar.DAY_OF_WEEK) > 5) {
calendar.add(Calendar.DAY_OF_WEEK, Calendar.DAY_OF_WEEK - calendar.get(Calendar.DAY_OF_WEEK));
}
if (days > 5 - calendar.get(Calendar.DAY_OF_WEEK)) {
int remainingDays = 5 - calendar.get(Calendar.DAY_OF_WEEK);
days -= remainingDays;
calendar.add(Calendar.DAY_OF_WEEK, remainingDays);

int weeks = days / 5;
if (weeks % 5 != 0) {
weeks++;
}
calendar.add(Calendar.DAY_OF_WEEK, days + weeks * 2);
} else {
calendar.add(Calendar.DAY_OF_WEEK, days);
}

return calendar.getTime();
}
}


循环可能是有必要的 因为说不定有些时候需要设置指定的天数为休息 不过如果仅仅是算周六周日的话 应该是没问题的
  • 打赏
  • 举报
回复
前面有人提到用循环,实际上没有必要,循环是 O(N) 的效率。因为每周的天数是固定的,只要知道基础日期是星期几,就可以直接计算增加的天数当中有多少个周六周日,需要增加的天数再加上这些天数就是了,这样可以达到 O(1) 的效率。
  • 打赏
  • 举报
回复
获取当前基本日期是星期几,根据增加天数算出其中有多少个周六和周日,就可以了。

当天为周一(记 C = 1)至周五(记 C = 5),增加 I = 11 天,实际需要增加 I + {[(C + I) - 1] div 5} * 2,即:11 + (11 div 5) * 2 = 11 + 2 * 2 = 15,则实际需要增加 15 天。

(div 表示整除运算)

当天为周日,记 C = 0,使用上面的公式。

当天为周六,公式:I + [(I - 1) div 5] * 2 + 1。若增加 6 天,即:6 + [(6 - 1) div 5] * 2 + 1 = 6 + 3 = 9,即实际加上 9 天即可。
盘龙之风 2011-01-20
  • 打赏
  • 举报
回复
Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY
今天是否为星期四

建议楼主学些下JDK 不会没关系回查就行
Thinking_In_IT 2011-01-18
  • 打赏
  • 举报
回复
你去data 里面找 当然一个毛 都没有
Thinking_In_IT 2011-01-18
  • 打赏
  • 举报
回复
java.util.Calendar 日历类 里面不是有获取 星期几的 方法?

写个if else 不会?
xinfei0803 2011-01-16
  • 打赏
  • 举报
回复
3楼说的很对呀,要想有大的提高,得多看源代码,也要多思考,当你觉得源代码无法满足你的要求时,你就对源代码进行修改或重写,这时候你不但有成就感,也表明你开始登堂入室了。
huntor 2011-01-16
  • 打赏
  • 举报
回复
动用一下你的数学脑细胞
Inhibitory 2011-01-15
  • 打赏
  • 举报
回复
不要什么都总想要去找到现成的方法,花了时间却还没解决,很简单的循环就可以解决的问题。
Inhibitory 2011-01-15
  • 打赏
  • 举报
回复
例如加100天,就在循环里加100次1天,在循环里过滤掉周六周日就可以了。
steely_chen 2011-01-15
  • 打赏
  • 举报
回复
把你的例子跟结果发上来

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧