题目描述
曾有邪教称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,则为周日,同理,月份也是一样的。