这是一个关于日期处理的题目,在这里我主要用了Calendar类的相关属性与方法。
首先,我们来分析一下:
我们可以从2019年1月1日,用while循环依次遍历,到2019年12月7日结束,每次加一天,利用if判断,满足在第一周且是周日的条件,我们就进行输出。但Calendar类Calendar.WEEK_OF_MONTH属性,即这一周在一个月中属于第几周这一属性设计的很不合我们的习惯,他是以周六作为一周的结束,比如19年的6月1日,恰好在周六,那么第一周就只有这一天,而作为周日的2号就在第二周了,所以我们通过运算符,把第二周也算上,再嵌套个if判断Calendar.DAY_OF_WEEK == 1 && Calendar.DATE) <= 7,
这样就很完美的输出了每个月的第一周的周日。废话少说,亮代码:`
public static void main(String[] args) throws ParseException {
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
String startdate = "2019-1-1";
String enddate = "2019-12-8";
String form = "yyyy-MM-dd";
SimpleDateFormat spf = new SimpleDateFormat(form);
start.setTime(spf.parse(startdate));
end.setTime(spf.parse(enddate));
while (start.before(end)) {
if (start.get(Calendar.WEEK_OF_MONTH) == 1 || start.get(Calendar.WEEK_OF_MONTH) == 2) {
if (start.get(Calendar.DAY_OF_WEEK) == 1 && start.get(Calendar.DATE) <= 7) {
System.out.println(spf.format(start.getTime()));
}
}
start.add(Calendar.DATE, 1);
}
}
那么我们能不能稍做些优化呢?不用问了,当然可以。这个问题我们还可以这样思考,我们只需要判断周末是不是在一个月的第一周就可以,不用每天加1,我们把循环的条件,即start.add(Calendar.DATE, 1)改为start.add(Calendar.DATE, 7),这一段while循环就只执行了原来的1/7次。具体修改就靠你们自己实现了。