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

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):设置当前日历的年月日

重点:

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

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

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

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

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

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

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

  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.

猜你喜欢

转载自blog.csdn.net/weixin_44998686/article/details/108911264