蓝桥杯题型——日期类问题

一、闰年判断条件

闰年一年366天。

static boolean isLeapYear(int year) {
	boolean tag = false;
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
		tag = true;
	}
	return tag;
}

二、求出给定日期是星期几

方法一:基姆拉尔森公式

y:年
m:月
d:日
W:星期几
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 

注意:
1.W的取值范围是0,1,2,3,4,5,6,分别代表星期日,星期一,星期二,星期三,星期四,星期五,星期六。
2.今年的12月要换成去年的1314月	
  eg:2020-1-1则换算成2019-13-1来代入公式计算。
3.这个公式可以直接计算出那个日期是星期几,但请注意!这类问题如果假设和真实情况不符的时候要记得换上偏移量,比如问题假设某个日期是星期一,而真实情况这天是星期二,那么我们计算出来的星期几也要-1,但请保证再1~7的环中。

方法二:API文档中Calendar类
注:1970年之前不能用API计算!!!

public static void main(String[] args) {
//		Calendar是抽象类,不能直接实例化,
//		Java提供了通过它的子类来实例化,或者静态工厂方法getInstance()来实例化Calendar
		Calendar calendar=new GregorianCalendar();//直接创建
		//Calendar c=Calendar.getInstance();//工厂方法
		
//		设置年份:1999年
		calendar.set(Calendar.YEAR, 1999);
		
//		设置月份:12月 	 注意:一月份是0,所以12月份是11
		calendar.set(Calendar.MONTH,11);
		
//		设置日期 :26日
		calendar.set(Calendar.DAY_OF_MONTH,26);
		
//		输出星期几  		注意:1 2 3 4 5 6 7 分别对应着周日 周一 周二 周三 周四 周五 周六
		int week=calendar.get(Calendar.DAY_OF_WEEK);
		System.out.println(week);
	}

或者设置年月日的时候将三句合成一句,用到了Date类

public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		//2020年12月26日 输出7 即周六
		cal.setTime(new Date(2020-1900,11,26));//这里不是因为题目啥啥原因才写的减号,而是API文档中写着只有-1900才是当前年份,即所求的2020年
		System.out.println(cal.get(Calendar.DAY_OF_WEEK));
}

方法三:Excel工具
注:如果询问的日期都在1970年之后的话,我们可以使用Excel直接计算。
技巧1:
日期处右击——>设置单元格格式
步骤1
将类型改成aaaa——>确定 即可。
步骤2
技巧2:
输入以下函数,回车即可。
利用函数text()

三、计算两个给定日期间的天数

方法一:自称“基点表示法”
思想:设定一个基点作为起始日期(公元元年一月一日),两个日期都与它 做差,再将所得结果相减即可。

//例:1979.12.15-2015.3.2

public class Date {
	static int days(int year1, int month1, int day1, int year2, int month2, int day2) {
		return getdays(year2, month2, day2) - getdays(year1, month1, day1);
	}
	
//  传入的日期与基点日期之间的天数
	static int getdays(int year, int month, int day) {
		int sum = 0;
		int[] dayOfMonth = new int[] { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		if (isLeapYear(year)) {
			dayOfMonth[2]++;
		}
		for (int i = 1; i < year; i++) {
			sum += 365;
			if (isLeapYear(i)) {
				sum++;
			}
		}
		for (int i = 1; i < month; i++) {
			sum += dayOfMonth[i];
		}
		sum += day;
		return sum;
	}

	static boolean isLeapYear(int year) {
		boolean tag = false;
		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
			tag = true;
		}
		return tag;
	}

	public static void main(String[] args) {
		System.out.println(days(1979, 12, 15, 2015, 3, 2));
	}
}

方法二:Excel工具
输入公式回车即可。
在这里插入图片描述结果

四、给定初始时间和经历天数,求最终时间

方法:Excel工具
输入以下公式回车即可。
在这里插入图片描述在这里插入图片描述

注意:
日期实质上就是一个整数,如果输入7188回车显示日期的格式,可以通过设置单元格格式,将格式换成常规,显示的便是整数;如果输入日期格式显示的是一个整数,可以通过设置单元格格式,将格式换成日期,显示的便是日期格式!
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值