java-日期相差天数

这篇文章提出了一个编程问题,要求编写Java代码计算给定日期与当前日期(2022年3月19日)之间的天数差异。解决方案包括使用SimpleDateFormat解析日期和用ChronoUnit计算天数差。
摘要由CSDN通过智能技术生成
pltdhll特别喜欢的日期是6月15日,因为这是一年中最中间的一天(pltdhll认为6是12的一半,15是30的一半,所以6月15日是一年最中间的一天)。

同时他也有其他喜欢的日期,比如2022年3月19日也就是今天,因为这是成都信息工程大学第一届团体程序设计天梯赛校赛的举办时间。

他突然想知道某个日期和今天相差的天数,但是手算太麻烦了,写代码的话他感觉代码量太多了,刚好今天遇见了正在看题干的你,想请你帮他完成这个程序。有些
日期太久远了,所以你只需要保证你的程序在1905年初(1905年01月01日)到2995年底(2995年12月31日)的正确性即可。

你的程序只要计算出pltdhll给你的日期与今天相差的天数,然后给出相应的提示语句即可。

注意,今天是2022年3月19日!

注意,今天是2022年3月19日!

注意,今天是2022年3月19日!

提示:闰年是公历中的名词,分为普通闰年和世纪闰年。公历年份是4的倍数的,且不是100的倍数,为普通闰年;公历年份是整百数的,必须是400的倍数才是世纪闰年。

输入格式:
在一行中给出一个八位数的日期,其格式为yyyymmdd,yyyy表示年,mm表示月,dd表示天。

题目保证所给日期在1905年初(1905年01月01日)到2995年底(2995年12月31日)之间。

输出格式:
根据下面提示以及相差的天数打印出相应的内容。

若所给日期在今天之前,则输出guo qv xx tian,其中xx表示相差天数。

若所给日期在今天之后,则输出hai you xx tian,其中xx表示相差天数。

若所给日期就是今天,则输出jiu shi jin tian!

输入样例1:
20220319
输出样例1:
jiu shi jin tian!
输入样例2:
20220615
输出样例2:
hai you 88 tian
输入样例3:
20210615
输出样例3:
guo qv 277 tian

第一种:先把日期当中的年月日解析出来,然后getTime()求出该时间对应的毫秒值,最后两日期相减,再除以(1000*60*60*24)转换为相差天数

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;


public class Main {
    public static void main(String[] args) throws ParseException {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        if(s.equals("20220319"))
            System.out.println("jiu shi jin tian!");
        else if(s.compareTo("20220319")>0)
            System.out.println("hai you "+day(s,"20220319")+" tian");
        else
            System.out.println("guo qv "+day(s,"20220319")+" tian");
    }
    public static int day(String s1,String s2) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
//        把年月日解析出来
        Date t1 = sdf.parse(s1);
        Date t2 = sdf.parse(s2);
//        计算时间对应的毫秒值
        Long T1 = t1.getTime();
        Long T2 = t2.getTime();
        Long T = Math.abs(T1 - T2);
//        相差的天数
        return (int) (T/1000/60/60/24);
    }
}

第二种:直接用运算符求出年月日的整形,然后利用LocalDate.of函数格式化日期,最后利用ChronoUnit.DAYS.between来求出两个日期隔了多少天。

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;


public class Main2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        if(a == 20220319)
            System.out.println("jiu shi jin tian!");
        else if (a >= 20220319)
            System.out.println("hai you "+days(a,20220319)+" tian");
        else
            System.out.println("guo qv "+days(a,20220319)+" tian");
    }
    public static int days(int t1,int t2){
        int nian1 = t1/10000;
        int nian2 = t2/10000;
        int yue1 = t1%10000/100;
        int yue2 = t2%10000/100;
        int ri1 = t1%100;
        int ri2 = t2%100;
        LocalDate startDate = LocalDate.of(nian1,yue1,ri1);
        LocalDate endDate = LocalDate.of(nian2, yue2, ri2);
        int days = (int)Math.abs(ChronoUnit.DAYS.between(startDate, endDate)) ;
        return days;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值