一、闰年判断条件
闰年一年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.今年的1、2月要换成去年的13、14月
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:
日期处右击——>设置单元格格式
将类型改成aaaa——>确定 即可。
技巧2:
输入以下函数,回车即可。
三、计算两个给定日期间的天数
方法一:自称“基点表示法”
思想:设定一个基点作为起始日期(公元元年一月一日),两个日期都与它 做差,再将所得结果相减即可。
//例: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回车显示日期的格式,可以通过设置单元格格式,将格式换成常规,显示的便是整数;如果输入日期格式显示的是一个整数,可以通过设置单元格格式,将格式换成日期,显示的便是日期格式!