java+计算截止天数_java 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期...

我也参考过其他的方案,

提供一个代码简洁的方案,具体性能没有测试过,

经过测试,跨年也可以正确计算截止日期;

/**

* 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期

* @param startDate 开始日期

* @param workDay 工作日天数(周一到周五)

* @return Date类型

* @createTime 2014-2-14

* @author Sunqinbo

*/

public static Date getWorkDay(Date startDate, int workDay, int hour, int second, int minute) {

Calendar c1 = Calendar.getInstance();

c1.setTime(startDate);

for (int i = 0; i < workDay; i++) {

// 判断当天是否为周末,如果是周末加1

if (Calendar.SATURDAY == c1.get(Calendar.SATURDAY) || Calendar.SUNDAY == c1.get(Calendar.SUNDAY)) {

workDay = workDay + 1;

c1.set(Calendar.DATE, c1.get(Calendar.DATE) + 1);

continue;

}

c1.set(Calendar.DATE, c1.get(Calendar.DATE) + 1);

// 当天数加1 判断是否为周末 如果是周末加1

if (Calendar.SATURDAY == c1.get(Calendar.SATURDAY) || Calendar.SUNDAY == c1.get(Calendar.SUNDAY)) {

workDay = workDay + 1;

c1.set(Calendar.DATE, c1.get(Calendar.DATE) + 1);

continue;

}

}

//c1.set(Calendar.HOUR_OF_DAY, hour);

//c1.set(Calendar.SECOND, second);

//c1.set(Calendar.MINUTE, minute);

// SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

// System.out.println(df.format(c1.getTime()) + " " + getWeekOfDate(c1.getTime()));

return c1.getTime();

}

/**

* 根据日期,获取星期几

* @param dt

* @return String类型

* @createTime 2014-2-14

* @author Sunqinbo

*/

public static String getWeekOfDate(Date dt) {

String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

Calendar cal = Calendar.getInstance();

cal.setTime(dt);

int w = cal.get(Calendar.DAY_OF_WEEK) - 1;

if (w < 0) w = 0;

return weekDays[w];

}

测试 夸年日期

public static void main(String[] args) throws ParseException {

String source = "2014-12-30 10:45:06";// 开始时间

int workDay = 10;// 工作日

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

df.parse(source);

for (int i = 0; i < workDay; i++) {

System.out.print("工作日:" + i + "天, ");

getWorkDay(df.parse(source), i);

}

}

输出结果

工作日:0天, 2014-12-30 10:45:06 星期二

工作日:1天, 2014-12-31 10:45:06 星期三

工作日:2天, 2015-01-01 10:45:06 星期四

工作日:3天, 2015-01-02 10:45:06 星期五

工作日:4天, 2015-01-05 10:45:06 星期一

工作日:5天, 2015-01-06 10:45:06 星期二

工作日:6天, 2015-01-07 10:45:06 星期三

工作日:7天, 2015-01-08 10:45:06 星期四

工作日:8天, 2015-01-09 10:45:06 星期五

工作日:9天, 2015-01-12 10:45:06 星期一

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算两个日期的相差天数可以使用Java 8中的java.time包中的Period类。而去除工作日可以使用Java 8中的java.time.temporal.TemporalAdjusters类和java.time.DayOfWeek枚举类来实现。 示例代码如下: ```java import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; import java.time.DayOfWeek; public class DateDiffWithoutWeekend { public static void main(String[] args) { LocalDate startDate = LocalDate.of(2021, 1, 1); LocalDate endDate = LocalDate.of(2021, 1, 10); long days = ChronoUnit.DAYS.between(startDate, endDate); // 去除周末 int weekends = 0; LocalDate date = startDate; while (date.isBefore(endDate)) { if (date.getDayOfWeek() == DayOfWeek.SATURDAY || date.getDayOfWeek() == DayOfWeek.SUNDAY) { weekends++; } date = date.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } long workingDays = days - weekends; System.out.println("相差天数(不去除周末):" + days); System.out.println("相差天数(去除周末):" + workingDays); } } ``` 在代码中,我们首先使用LocalDate类创建开始日期和结束日期,然后使用ChronoUnit类的DAYS字段计算它们之间的天数。 接下来,我们使用while循环和TemporalAdjusters类的next()方法来遍历开始日期和结束日期之间的所有周一,并在每个周末(即周六和周日)增加计数器。最后,我们将周末的计数器从总天数中减去,得到去除周末后的工作日天数。 注意:本代码仅适用于计算两个日期之间的天数,如果需要计算工作日的小时数或分钟数,则需要进行更复杂的计算

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值