1360. 日期之间隔几天
解题思路
1.分析题意,了解平闰年区别和天数
2.先将data1、data2 string转换为整数
3.如果年月相等,则只需取日的差值的绝对值即可
4.计算year1到year2之间有多少天
5.如果年相等,则需要判断小月到大月的天数
6.如果不相等,计算year1当年到年底,还有多少天,计算到year2年规定日期,还有多少天
解题遇到的问题
1.判断闰年和平年的方法,非整百年:能被4整除的为闰年,整百年:能被400整除的是闰年
2.平年和闰年的区别是,2月份分别有29天和28天
3.闰年有366天,平年有365天
4.每个月31天的有 1月、3月、5月、7月、8月、10月、12月
后续需要总结学习的知识点
无
##解法1
class Solution {
public static void main(String[] args) {
System.out.println(daysBetweenDates("2019-06-30", "2019-07-30"));
}
public static int daysBetweenDates(String date1, String date2) {
// 判断闰年和平年的方法,除以4,如果商是整数,则为闰年,如果不是,则为平年
// 平年和闰年的区别是,2月份分别有29天和28天
// 先将data1、data2 string转换为整数
String[] data1String = date1.split("-");
String[] data2String = date2.split("-");
int year1 = Integer.parseInt(data1String[0]);
int year2 = Integer.parseInt(data2String[0]);
if (year1 > year2) {
return getTotalDays(data2String, data1String);
} else {
return getTotalDays(data1String, data2String);
}
}
public static int getTotalDays(String[] data1String, String[] data2String) {
int year1 = Integer.parseInt(data1String[0]);
int year2 = Integer.parseInt(data2String[0]);
int mon1 = Integer.parseInt(data1String[1]);
int mon2 = Integer.parseInt(data2String[1]);
int day1 = Integer.parseInt(data1String[2]);
int day2 = Integer.parseInt(data2String[2]);
int result = 0;
// 如果年月相等,则只需取日的差值的绝对值即可
if (year1 == year2 && mon1 == mon2) {
return Math.abs(day1 - day2);
}
// 闰年有366天,平年有365天,计算year1到year2之间有多少天
for (int i = year1 + 1; i < year2; i++) {
if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
result += 366;
} else {
result += 365;
}
}
// 每个月31天的有 1月、3月、5月、7月、8月、10月、12月
boolean isYear1Run = (year1 % 4 == 0 && year1 % 100 != 0)
|| (year1 % 400 == 0);
boolean isYear2Run = (year2 % 4 == 0 && year2 % 100 != 0)
|| (year2 % 400 == 0);
if (year1 == year2) {
// 如果年相等,则需要判断小月到大月的天数
if (mon1 > mon2) {
int temp = mon2;
mon1 = mon2;
mon2 = temp;
}
for (int i = mon1 + 1; i < mon2; i++) {
result += getMonDays(isYear1Run, i);
}
} else {
// 计算year1当年到年底,还有多少天
for (int i = mon1 + 1; i < 13; i++) {
result += getMonDays(isYear1Run, i);
}
// 计算到year2年规定日期,还有多少天
for (int i = 1; i < mon2; i++) {
result += getMonDays(isYear2Run, i);
}
}
result = result + getMonDays(isYear1Run, mon1) - day1;
result += day2;
return result;
}
public static int getMonDays(boolean isRun, int x) {
switch (x) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return isRun ? 29 : 28;
}
return 0;
}
}
网友评论