Java:获取两个区间内 为周几或星期符合 的所有日期,指定日期 使用周数计算出相对应的工作日

  • 测试类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;public class TestPan11 {public static void main(String[] args) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//获取两个区间内 为 周二的所有日期List<String> dayOfWeekWithinDateInterval = getDayOfWeekWithinDateInterval("2020-12-14", "2021-01-14", 2);System.out.println("获取两个区间内 为 周二的所有日期 : "+dayOfWeekWithinDateInterval);//结果: [2020-12-15, 2020-12-22, 2020-12-29, 2021-01-05, 2021-01-12]// 指定日期加上 *  天  算出结束日期   备注  注意看调用这个方法的执行注释  这个4 和7  的区别,4为4周。7天为一周String endDate= selectBeginAndEndDate("2020-12-14", 4);System.out.println("指定日期加上 *  天  算出结束日期 : "+endDate);//结果: 2021-01-11//这个是算出两个日期区间内,的所有日期List<String> dates = getBeginAndEndDateBetween("2020-12-14", "2021-01-11");System.out.println(dates);//指定日期,推算计算出这个日期为: 周几?星期几?String week = getWeek(sdf.parse("2020-12-14"));System.out.println("指定日期,推算计算出这个日期为 : "+week);//结果 : 周一//区间内,计算多个周数的日期集合String scheduleWeek = "2,4";List<String> strings = Arrays.asList(scheduleWeek.split(","));//        //2、使用:得出集合日期 - 不排班的日期  = 获取区间内要排班的所有日期Collection<String> scheduleRuleDateList = new ArrayList<>();for (String dayWeek : strings) {//            List<String> dayOfWeekWithinDateInterva12 = getDayOfWeekWithinDateInterval("2020-12-14", endDate, Integer.parseInt(dayWeek));List<String> dayOfWeekWithinDateInterva12 = getDayOfWeekWithinDateInterval("2020-12-14", "2021-01-11", Integer.parseInt(dayWeek));scheduleRuleDateList.addAll(dayOfWeekWithinDateInterva12);}System.out.println("指定日期 + 周数 算出区间内所有日期  得出集合日期 : "+scheduleRuleDateList);}/***      指定日期;算出指定 * 某多少天数的日期* @param startDate* @param weekNum*/public static String selectBeginAndEndDate(String startDate,long weekNum)  {try {weekNum = weekNum * 7-1;    // - 注意一点,* 7 这个暂时使用到这个为周数的,如果换成天或月或年。相对应要改变。-1:起始日期算 1 天+7 = 8天  -1是结束日期宿回一天,使用起始日期顶Date date = sdf.parse(startDate); // 指定日期long time = date.getTime(); // 得到指定日期的毫秒数weekNum = weekNum*24*60*60*1000; // 要加上的天数转换成毫秒数time+=weekNum; // 相加得到新的毫秒数return sdf.format(new Date(time)); // 将毫秒数转换成日期} catch (ParseException e) {e.printStackTrace();}return null;}/***      指定起始日期 : 指定结束日期 :指定周几 ,算出区间内指定周几的日期* @param dateBegin* @param dateEnd* @param weekDays*/public static List<String> getDayOfWeekWithinDateInterval(String dateBegin, String dateEnd, int weekDays) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");List<String> dateResult = new ArrayList<>();   //如果要换成日期类型的这里定义
//        List<Date> dateResult = new ArrayList<>();   //如果要换成日期类型的这里定义Calendar cal = Calendar.getInstance();String[] dateInterval = {dateBegin, dateEnd};Date[] dates = new Date[dateInterval.length];for (int i = 0; i < dateInterval.length; i++) {String[] ymd = dateInterval[i].split("[^\\d]+");cal.set(Integer.parseInt(ymd[0]), Integer.parseInt(ymd[1]) - 1, Integer.parseInt(ymd[2]));dates[i] = cal.getTime();}for (Date date = dates[0]; date.compareTo(dates[1]) <= 0; ) {cal.setTime(date);if (cal.get(Calendar.DAY_OF_WEEK) - 1 == weekDays) {String format = sdf.format(date);  //控制为 返回什么类型的 相反即可dateResult.add(format);  //控制为 返回什么类型的 相反即可
//                dateResult.add(date);}cal.add(Calendar.DATE, 1);date = cal.getTime();}return dateResult;}/***      指定日期:算出指定日期是周几或是星期几* @param date*/public static String getWeek(Date date){//        String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};String[] weeks = {"周日","周一","周二","周三","周四","周五","周六"};Calendar cal = Calendar.getInstance();cal.setTime(date);int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;if(week_index<0){week_index = 0;}return weeks[week_index];}/*** 获取两个日期之间的所有日期** @param beginDate  开始日期* @param endDate   结束日期* @return  List集合*/public static List<String> getBeginAndEndDateBetween(String beginDate, String endDate) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");List<String> list = new ArrayList<String>(); //保存日期的集合Date date_start = sdf.parse(beginDate);Date date_end = sdf.parse(endDate);Date date =date_start;Calendar cd = Calendar.getInstance();//用Calendar 进行日期比较判断while (date.getTime() <= date_end.getTime()){list.add(sdf.format(date));cd.setTime(date);cd.add(Calendar.DATE, 1);//增加一天 放入集合date=cd.getTime();}return list;}
  • 指定起始日期 : 指定结束日期 :指定周几 ,算出区间内指定周几的日期
    /***      指定起始日期 : 指定结束日期 :指定周几 ,算出区间内指定周几的日期* @param dateBegin* @param dateEnd* @param weekDays*/public static List<String> getDayOfWeekWithinDateInterval(String dateBegin, String dateEnd, int weekDays) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");List<String> dateResult = new ArrayList<>();   //如果要换成日期类型的这里定义
//        List<Date> dateResult = new ArrayList<>();   //如果要换成日期类型的这里定义Calendar cal = Calendar.getInstance();String[] dateInterval = {dateBegin, dateEnd};Date[] dates = new Date[dateInterval.length];for (int i = 0; i < dateInterval.length; i++) {String[] ymd = dateInterval[i].split("[^\\d]+");cal.set(Integer.parseInt(ymd[0]), Integer.parseInt(ymd[1]) - 1, Integer.parseInt(ymd[2]));dates[i] = cal.getTime();}for (Date date = dates[0]; date.compareTo(dates[1]) <= 0; ) {cal.setTime(date);if (cal.get(Calendar.DAY_OF_WEEK) - 1 == weekDays) {String format = sdf.format(date);  //控制为 返回什么类型的 相反即可dateResult.add(format);  //控制为 返回什么类型的 相反即可
//                dateResult.add(date);}cal.add(Calendar.DATE, 1);date = cal.getTime();}return dateResult;}
  • 指定日期;算出指定 * 某多少天数的日期
    /***      指定日期;算出指定 * 某多少天数的日期* @param startDate* @param day*/public static String selectBeginAndEndDate(String startDate,long day) throws ParseException {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // 日期格式Date date = dateFormat.parse(startDate); // 指定日期long time = date.getTime(); // 得到指定日期的毫秒数day = day*7*24*60*60*1000; // 要加上的天数转换成毫秒数   - 注意一点,* 7 这个暂时使用到这个为周数的,如果换成天或月或年。相对应要改变。time+=day; // 相加得到新的毫秒数return dateFormat.format(new Date(time)); // 将毫秒数转换成日期}
  • 指定日期:算出指定日期是周几或是星期几
    /***      指定日期:算出指定日期是周几或是星期几* @param date*/public static String getWeek(Date date){//        String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};String[] weeks = {"周日","周一","周二","周三","周四","周五","周六"};Calendar cal = Calendar.getInstance();cal.setTime(date);int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;if(week_index<0){week_index = 0;}return weeks[week_index];}
  • 获取两个日期之间的所有日期
    /*** 获取两个日期之间的所有日期** @param beginDate  开始日期* @param endDate   结束日期* @return  List集合*/public static List<String> getBeginAndEndDateBetween(String beginDate, String endDate) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");List<String> list = new ArrayList<String>(); //保存日期的集合Date date_start = sdf.parse(beginDate);Date date_end = sdf.parse(endDate);Date date =date_start;Calendar cd = Calendar.getInstance();//用Calendar 进行日期比较判断while (date.getTime() <= date_end.getTime()){list.add(sdf.format(date));cd.setTime(date);cd.add(Calendar.DATE, 1);//增加一天 放入集合date=cd.getTime();}return list;}

Java:获取两个区间内 为周几或星期符合 的所有日期,指定日期 使用周数计算出相对应的工作日相关推荐

  1. java获取两个字符串日期之间间隔的天数

    java获取两个字符串日期之间间隔的天数 import java.text.ParseException; import java.text.SimpleDateFormat; import java ...

  2. java获取double类型区间随机数

    获得0.68-6.88的随机数 前提:java获取double类型区间随机数 *** 获取0.68-6.88之间的随机数* @return*/ public static Double queryHo ...

  3. java 获取两条经纬度线段的交点坐标工具类

    java 获取两条经纬度线段的交点坐标工具类 网上有线段是否相交的判断方法,但是很少有获取线段交点的坐标的方法 我在这里整合了网上的一些相交的方法,通过相交的xy轴点返推出了经纬度. 拾取坐标系统 可 ...

  4. java获取两个日期之间的所有日期(包括开始日期和结束日期)

    java获取两个日期之间的所有日期集合 解决方法: import java.text.SimpleDateFormat; import java.util.ArrayList; import java ...

  5. java将两个区间范围合并_Java如何将若干时间区间进行合并的方法步骤

    问题原因 工作中突然有个场景,需要合并时间区间.将若干闭合时间区间合并,实现思路如下: 1. 先对日期区间进行按时间顺序排序,这样后一个区间(记为next)的from一定是不小于前一个(记为prev) ...

  6. java获取两个时间之间的所有日期、月份、年份,返回列表

     需求描述 输入开始时间和结束时间,获取时间范围内的所有日期,月份.年份     (输入可以为"yyyy-MM-dd HH:mm:ss"或者"yyyy-MM-dd&quo ...

  7. java 获取两个时间差_java如何获取两个日期的时间差

    本文实例为大家分享了java如何获取两个日期的时间差,供大家参考,具体内容如下 rainBeginTime是从本地数据库获取的时间,格式为"yyyy-MM-ddTHH:mm:ss" ...

  8. Java 获取两个月份之间的所有月份(含跨年)

    /*** 获取两个月份之间的所有月份(含跨年)** @param minDate 开始时间 格式 2022-02或 2022-01-03* @param maxDate 结束时间 格式 2023-08 ...

  9. java获取两个时间的间隔天数_java获取两日期的间隔天数

    这是我程序中用到的方法,传入的日期格式,可根据本身的须要做相应的改变.java /** * 读取两个日期之间的天数 * @param begin yyyy-mm-dd * @param end yyy ...

  10. Java 获取两个日期之间的日期

    1.前期需求,两个日期,startDate和endDate,然后获取到两个日期之间的日期 /*** 获取两个日期之间的日期* @param start 开始日期* @param end 结束日期* @ ...

最新文章

  1. int和long计算问题
  2. 怎么设置tomcat管理员的用户名和密码
  3. mysql中给用户添加密码_MySql中添加用户,新建数据库,用户授权,删除用户,修改密码...
  4. 运算放大器基本公式_运算放大器 - 产生的背景和解决的问题
  5. Centos6.3下DRBD+HeartBeat+NFS配置笔记
  6. 用Navicat for Mysql导入.sql文件
  7. Hive SQL开窗函数详解
  8. 浅谈操作系统是如何工作的及简单的进程调度的linux实现
  9. gcc与g++编译器介绍
  10. mysql-5.6.24-win32解决没有my.ini并且修改编码
  11. cass小插件集合_CASS插件合集 - 下载 - 搜珍网
  12. Win10x64安装Dolby
  13. C++数据库编程简介
  14. Java版2048小游戏
  15. db2的节点编目和数据库编目
  16. php组合图片代码,使用php shell命令合并图片的代码
  17. 小程序云开发(九):WeUI
  18. 八. geotrellis使用 矢量数据栅格化
  19. uniapp对接微信公众号H5微信支付、分享、小程序隐藏右上角分享胶囊
  20. 这是我见过最通俗易懂的MES与ERP介绍文章,带你剖析工业4.0!

热门文章

  1. 2020年全国工业固体废物、危险废物产生量、利用处置量及防治措施分析[图]
  2. python 以图搜图1688_python 以图搜图
  3. 树莓派(Raspberry Pi) 命令行下如何配置wifi(wlan)
  4. 解决桥接模式连接虚拟机的问题
  5. Win10运行pip install image-similarity-measures失败的处理方式(GDAL和rasterio安装)
  6. PyTorch 音频处理教程
  7. 识别到硬盘 计算机不显示盘符,Win10系统下移动硬盘可以识别但是不显示盘符的解决方法...
  8. 【计算机网络】物理层
  9. 怎么清理C盘释放空间 ?
  10. 服务器系统补丁失败,windows server 2008更新补丁失败排错