XX是途虎养车的一名技术人员,同时也是校招的形象大使,由于忙于直播荒废了项目进度。
他想写一个程序来计算项目进度,请你帮他写一个函数,计算两个日期间,还有多少个工作日可供工作。
2020,9,25,2020,9,28
1
从2020年9月25日00:00 到 2020年9月28日 00:00,只有一个工作日,即2020年9月25日
1. 这里的工作日是指从周一到周五,不考虑法定节假日和换休;2. 这里假设历法按现行历法,没有更改过;也即是说公元1年1月1日在此假设下是星期一3. 日期皆是指当天0:00为准,即输入的2020-09-08,是指2020-09-08 00:00。4. 输入的日期都是在此假设下合法的,所有输入都是正数
import java.util.*; import java.time.*; import java.time.temporal.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param y1 int整型 当前日期的年 * @param m1 int整型 当前日期的月 * @param d1 int整型 当前日期的日 * @param y2 int整型 项目截止日期的年 * @param m2 int整型 项目截止日期的月 * @param d2 int整型 项目截止日期的日 * @return int整型 */ public int workdays_between (int y1, int m1, int d1, int y2, int m2, int d2) { LocalDate start = LocalDate.of(y1, m1, d1); LocalDate end = LocalDate.of(y2, m2, d2); long days = start.until(end, ChronoUnit.DAYS); if (days < 0) { return 0; } DayOfWeek sd = start.getDayOfWeek(); DayOfWeek ed = end.getDayOfWeek(); int shas = DayOfWeek.SUNDAY.getValue() - sd.getValue() + 1; int ehas = ed.getValue() - DayOfWeek.MONDAY.getValue(); long allDays = days - shas - ehas; long weekdays = allDays - allDays / 7 * 2; if (shas > 2) { weekdays += shas - 2; } weekdays += Math.min(5, ehas); return (int)weekdays; } }