天天看点

曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。还有人称今后的某个世纪末的12月31日,如果是星期一则会… 有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!

#Calendar的小运用

本人基础较菜,跟随大佬,从今天学习第一个小知识开始记录:

曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。还有人称今后的某个世纪末的12月31日,如果是星期一则会…

有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 于是,“谣言制造商”又修改为星期日…

1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?

请回答该年份(只写这个4位整数,不要写12月31等多余信息)

思路

网上解法有很多,最极致简单的就是excel操作,但这不是我们要关注的

具体见:https://blog.csdn.net/qq_45281807/article/details/109105467

之所以没有思路,是因为不清楚java的常用类库——Calendar类

网上也有很多关于这个的见解,这里着重推荐这一篇:

https://blog.csdn.net/beyond_liyy/article/details/6425397?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf

大佬讲得非常详细,建议不懂的地方就翻出来看,你一定会有很大收获

以下是代码部分

/**
说明一下需要用到的一些知识:
1.getInstance():该方法返回Calendar类的子类对象;
为什么说『返回Calendar类的子类对象』?
首先Calendar类是一个抽象类,所以不存在所谓的Calendar类的实例,
其次在地球上有很多不同的时区,不同的时区就要对应不同的Calendar类的的子类
(每个国家都有自己的一套日历算法,比如西方的国家的第一个星期大部分为星期日,而中国则为星期一,等等)

2.get()方法:该方法接受Calendar类的YEAR、MONTH、DAY_OF_MONTH、HOUR、
MINUTE、SECOND等日历字段,获得的月份为实际的月份值减1,获得的星期的值和Date类不一样。在Calendar类中,周日是1,周一是2,周二是3,依次类推。

3.set()方法:设置相应的日历字段,使用Calendar类代表指定的时间时,Calendar类中年份的数值直接书写,月份的值为实际的月份值减1,日期的值就是实际的日期值

eg:   Calendar c1 = Calendar.getInstance();
	    c1.set(2009, 2, 9);
以上示例代码设置的时间为2009年3月9日

4.如果说明过于冗杂,建议再回去看看那位大佬的博客
*/
代码实现部分:
		public static void main(String[] args) {
		for ( int i = 1999;; i += 100) {
		Calendar calendar = Calendar.getInstance ();
		calendar.setTime(new Date(i - 1900,11,31));
		//setTime,该方法的作用是将Date对象转换为对应的Calendar对象
		if (calendar.get(Calendar.DAY_OF_WEEK ) - 1 == 0) {
		System.out .println(i);
		return;
		}
	}
}
           

该年为2299年。