Leetcode-1360 日期之间隔几天

作者: itbird01 | 来源:发表于2021-11-03 09:47 被阅读0次

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;
    }
}

相关文章

  • Leetcode-1360 日期之间隔几天

    1360. 日期之间隔几天[https://leetcode-cn.com/problems/number-of-...

  • 日期之间隔几天

    这个可以封装成一个工具类。 问题: A:

  • 5169. 日期之间隔几天

    解题思路 就是计算到1971年的之间的相对值 然后把两个时间之间相减 自己的思路 相对值 = 相隔的年数 * 36...

  • 2020-02-13 excel小技巧

    -日期的问题主要有 1 根据开始日期和间隔推算结束日期,根据间隔和结束日期推算开始或者推算间隔多少 使用year,...

  • 28、日期函数:DATEDIF2018-10-18

    一、基本用法 DATEDIF(起始日期,终止日期,间隔单位),计算2个日期的间隔 二、计算工龄 =DATEDIF(...

  • 日期函数

    datedif函数 datedif函数解释: datedif(起始日期,终止日期,间隔单位)计算两个日期的间隔 计...

  • 时间间隔

    日期间隔 两种方式: 1.LocalDate 2.Calendar 时间间隔

  • 实现my97DatePicker/WdatePicker 的周日

    最终效果如下:开始日期与结束日期最小间隔一周,最大间隔30周,开始日期结束日期都在当前周之前,且从周一至周日算为一...

  • 2018-01-12

    1. 计算日期间隔:TIMESTAMPDIFF(day,小日期,大日期) 2. 随机取100条数据: order ...

  • python昨天/今天/明天/日期间隔

    获取日期(不包含时分秒) 获取时间间隔

网友评论

    本文标题:Leetcode-1360 日期之间隔几天

    本文链接:https://www.haomeiwen.com/subject/vjctzltx.html