第三届——01世纪末的星期

    科技2022-07-11  124

    1. 标题: 世纪末的星期

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

    在做题之前,先学习Calendar这个类

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

    成员方法: > public static Calendar getlnstance() public int get(int field) public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操作。 public final void set(int year,int month,int date):设置当前日历的年月日

    重点:

    实例:Calendar的getInstance方法返回一个Calendar对象,该对象的日历字段已与当前的日期和时间初始化:

    Calendar rightNow = Calendar.getInstance(); public static Calendar getInstance() { return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT)); }

    日历字段可以用三种方法改变:set() 、 add() 、poll()

    Year:对于 get和 set指示年场数。

    Mouth:January 为0,所以 [ 0,11 ]

    DAY_OF_MONTH:对于 get和 set显示该月的一天。月的第一天有价值1。

    DAY_OF_WEEK: SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,和 SATURDAY。分别对应:1,2,3,4,5,6,7

    HOUR:12小时时钟(0 - 11)。中午和午夜的代表0,而不是12

    public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); for (int year = 1999;; year += 100) { calendar.set(Calendar.YEAR, year);// 要找year calendar.set(Calendar.MONTH, 11);// 12个月,第一个月从0开始因为我们要找的是12月 calendar.set(Calendar.DAY_OF_MONTH, 31);// 月份第一天为1,我们要找的是31号 if (calendar.get(Calendar.DAY_OF_WEEK) == 1) {// 如果该年的12月31日是星期天(星期天为1) System.out.println(year); break; } }

    答案:2299

    补充题:

    1.算一下你来到世界上多少天

    写法一:

    public class MyYear { public static void main(String[] args) throws ParseException { // 键盘录入你的出生的年月日 Scanner sc = new Scanner(System.in); System.out.println("请输入你的出生年月日:"); String line = sc.nextLine(); // 把该字符串转换为一个日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date d = sdf.parse(line); // 通过该日期得到一个毫秒值 long myTime = d.getTime(); // 获取当前时间的毫秒值 long nowTime = System.currentTimeMillis(); // 得到一个差值 long time = nowTime - myTime; // 把差值转换为年 double day = time / 1000 / 60 / 60 / 24; System.out.println("你来到这个世界:" + day + "天"); } }

    控制台输入的时候注意是:yyyy-mm-dd的形式,不然会出错!

    写法二:

    我自己写的方法: 避坑避雷!!!默念三遍:month是从0开始的!month是从0开始的!month是从0开始的!

    public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); // 键盘录入你的出生年月日 Scanner input = new Scanner(System.in); System.out.println("请输入你的出生年月日:"); int year = input.nextInt(); int month = input.nextInt(); int day = input.nextInt(); // 得到一个毫秒值 calendar.set(year, month - 1, day); Date date = calendar.getTime(); long myTime = date.getTime(); long nowTime = System.currentTimeMillis(); long time = nowTime - myTime; double days = time / 1000 / 60 / 60 / 24; System.out.println("你来到这个世界:" + (long) days + "天"); }

    此外,还有一个坑,我们如果用第一种方法写,其中的

    SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);

    一定要这样写,不能写成yyyy-mm-d,数据会错的,原因是:每个字母,就算是同一个字母的大小写,都有对应的含义。不能随便写的。

    2.获取任意一年的二月有多少天

    public static void main(String[] args) throws ParseException { // 输入任意年份 // 设置日历对象的年月日 // 把时间往前推一天,就是2月的最后一天 // 输出这一天 // 键盘录入你的出生年月日 Scanner input = new Scanner(System.in); int year = input.nextInt(); Calendar calendar = Calendar.getInstance(); calendar.set(year, 2, 1); calendar.add(Calendar.DATE, -1); System.out.println(calendar.get(Calendar.DATE)); }

    end.

    Processed: 0.054, SQL: 8