例如,我的日期范围为:“ 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);
}
}
感谢我能得到的任何帮助。谢谢
您可以使用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;
}
一个可能的解决方案(使用java.time