JAVA从用户输入的两个日期之间打印和分隔日期(周末和工作日)

问题描述 投票:1回答:2

例如,我的日期范围为:“ 1/6/2020-7/6/2020”,它有5天的工作日(1/6-5/6)和2天的周末(6/6-7 / 6)。我想将其传递给一个函数,该函数将返回2个单独的日期列表,工作日和周末。我怎样才能做到这一点?我尝试了下面的代码,它正在工作,但是我不能在“ while”循环之外的函数返回结果之外使用它。

SimpleDateFormat dfs= new SimpleDateFormat("yyyy-MM-dd");
Date sd = dformat.parse(param_start);
Date ed = dformat.parse(param_end);
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(sd);
c2.setTime(ed);
String pstart = "";

while(!c1.after(c2)){
    System.out.println("WD Date: " + dfs.format(c1.getTime()));
    pstart = "'"+dfs.format(c1.getTime())+" 00:00:00',";
    out.print(pstart.substring(0,pstart.length()-1));
    int dayOfWeek = c1.get(Calendar.DAY_OF_WEEK);
      if (dayOfWeek == Calendar.FRIDAY) {
          c1.add(Calendar.DATE, 3);
      } else if (dayOfWeek == Calendar.SATURDAY) {
           c1.add(Calendar.DATE, 2);
      } else {
           c1.add(Calendar.DATE, 1);
      }
}

感谢我能得到的任何帮助。谢谢

java date
2个回答
0
投票

您可以使用Map<String,List<Date>>来保存weekDays和Weekend,也可以创建具有两个List<Date>类型的属性的类>

以下功能将分别为您提供工作日和周末。

public  Map<String,List<Date>> datePartionar(String startDate,String endDate) {
    // Define map and initialize
    Map<String,List<Date>> res = new HashMap<>();
    res.put("weekend",new ArrayList<>());
    res.put("weekDays",new ArrayList<>());
    try {
        // parse date and initialize calender Date
        SimpleDateFormat dfs= new SimpleDateFormat("yyyy-MM-dd");
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c1.setTime(dfs.parse(startDate));
        c2.setTime(dfs.parse(endDate));
        String pstart = "";

        while(!c1.after(c2)){
            int dayOfWeek = c1.get(Calendar.DAY_OF_WEEK);
            if(dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY){
                res.get("weekend").add(c1.getTime());
            }
            else {
                res.get("weekDays").add(c1.getTime());
            }
            c1.add(Calendar.DATE, 1);
        }
    }
    catch (ParseException pe){
        pe.printStackTrace();
        return  null;
    }

    return res;
}

0
投票

一个可能的解决方案(使用java.time

© www.soinside.com 2019 - 2024. All rights reserved.