如何打印2019年每个月的第一个星期天的日期

这是一个关于日期处理的题目,在这里我主要用了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次。具体修改就靠你们自己实现了。

发布了1 篇原创文章 · 获赞 2 · 访问量 123

猜你喜欢

转载自blog.csdn.net/a320976399/article/details/104629936