2013第四届蓝桥杯JavaB组省赛 第一题:世纪末的星期

题目描述
曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。还有人称今后的某个世纪末的12月31日,如果是星期一则会…有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!于是,“谣言制造商”又修改为星期日…1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?请回答该年份(只写这个4位整数,不要写12月31等多余信息)

可以使用Calendar获取当天日期,并且对年月日不断地更新,去判断获取到的世纪末是周几。

 1 package day;
 2 
 3 import java.util.Calendar;
 4 
 5 public class WeekEndCentury {
 6     public static void main(String[] args){
 7         Calendar calendar = Calendar.getInstance();
 8         for(int year = 1999 ; year <= 9999 ; year += 100){
 9             calendar.set(year,11,31);
10             if(calendar.get(Calendar.DAY_OF_WEEK) == 1){
11                 System.out.println(year);
12                 break;
13             }
14         }
15     }
16 }

Calendar:它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

Calendar类是个抽象类,在JAVA中,抽象类是不能被直接实例化的,但是这里却创建了抽象类的对象。其实,并不是Calendar类本身被实例化了,而是其子类的实例,当调用了getInstance方法之后,方法内部会实例化一个GregorianCalendar 对象并返回,这也反映了JAVA的一种设计模式——单例模式。

受西方影响,每周第一天为周日,所以获取到的星期数等于1,则为周日,同理,月份也是一样的。

原文地址:https://www.cnblogs.com/woju/p/14234805.html