Acwing.3498 日期差值(日期计算)

文章讲解如何使用Java编写简洁代码,计算两个给定日期之间的天数差,适用于解决类似编程竞赛问题。
摘要由CSDN通过智能技术生成

题目

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。

输入格式

输入包含多组测试数据。

每组数据占两行,分别表示两个日期,形式为 YYYYMMDD。

输出格式

每组数据输出一行,即日期差值。

数据范围

年份范围 [1,9999]
保证输入日期合法。
测试数据的组数不超过 100。

  • 输入样例:
20110412
20110422
  • 输出样例:
11

题解(这里是引用大佬的代码,为什么不自己写思路会解释)

import java.util.*;

public class Main {
    static int[] p = new int[10];
    static int[] month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    public static boolean check(int x)
    {
        if (x % 4 == 0 && x % 100 != 0 || x % 400 == 0)
        return true;

        return false;
    }

    public static int solve(int a, int b, int c)
    {
        int res = 0;
        for (int i = 1; i < a; i ++ ) 
        {
            if (check(i)) res += 366;
            else res += 365;
        }

        for (int i = 1; i < b; i ++ ) 
        {
            if (i == 2 && check(a))
            res += 1;
            res += month[i - 1];
        }

        res += c;

        return res;
    }

    public static int get(String x)
    {
        int a = 0, b = 0, c = 0;
        for (int i = 1; i <= x.length(); i ++ )
            p[i] = x.charAt(i - 1) - '0';

        a = p[1] * 1000 + p[2] * 100 + p[3] * 10 + p[4];
        b = p[5] * 10 + p[6];
        c = p[7] * 10 + p[8];

        return solve(a, b, c);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext())
        System.out.println(Math.abs(get(sc.next()) - get(sc.next())) + 1);
    }
}

作者:ifei_2
链接:https://www.acwing.com/activity/content/code/content/7989601/
来源:AcWing

思路

这道题是一道简单计算题,做这道题签完不要想着去计算两个日期中间的时间,那样太过于麻烦,会有太多条件判断,这种情况一般直接计算两个日期的总天数相减就行了。博主就是计算中间天数写了半个小时条件最后懒得写了,警钟长鸣!!因为日期计算确实是简单题,不应该在上面花费太多时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值