jmu-java-日期类的基本使用

  1. 给定一个日期,判定是否为合法日期。如果合法,判断该年是否闰年,该日期是当年第几天、当月第几天、当周第几天、。
  2. 给定起始日期与结束日期,判定日期是否合法且结束日期是否早于起始日期。如果均合法,输出结束日期与起始日期之间的相差的天数、月数、念书。

输入格式:

第一行输入一个日期字符串,格式为"YYYY-MM-dd"
第二行输入两个日期字符串,中间使用空格隔开。分别代表开始日期结束日期

输出格式:

如果第一行日期字符串非法,输出自定义的错误信息。
如果第一行日期有效,输出相关信息,如果是闰年要输出是闰年
如果第二行两个日期,只要有一个无效。就输出相关错误信息。
如果第二行两个日期有效且结束日期不早于开始日期,输出相关信息。

输入样例1:

第一行日期非法、第二行有日期非法

2020-02-30
2020-02-30 2020-01-02

输出样例1:

2020-02-30无效!
2020-02-30或2020-01-02中有不合法的日期.

输入样例2:

均有效且合法

2021-02-28
2019-08-01 2020-01-02

输出样例2:

2021-02-28是当年第59天,当月第28天,当周第7天.
2020-01-02与2019-08-01之间相差154天,所在月份相差-7,所在年份相差1.

输入样例3:

日期均有效,但结束日期早于开始日期

2020-02-28
2020-02-02 2020-02-01

输出样例3:

2020-02-28是闰年.
2020-02-28是当年第59天,当月第28天,当周第5天.
2020-02-01早于2020-02-02,不合法!

我的代码如下:

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

public class Main
{
    public static int []month_day = {31,28,31,30,31,30,31,31,30,31,30,31};
    public static void main(String[] args)
    {
        Scanner input  = new Scanner(System.in);
        String date = input.next();
        String start = input.next();
        String end = input.next();
        String date1 = number(date);
        String start1 = number(start);
        String end1 = number(end);
        int date2 = Integer.parseInt(date1);
        int start2 = Integer.parseInt(start1);
        int end2 = Integer.parseInt(end1);
        int dateDay = date2%100;
        int dateMonth = date2/100%100;
        int dateYear = date2/10000;
        int startDay = start2%100;
        int startMonth = start2/100%100;
        int startYear = start2/10000;
        int endDay = end2%100;
        int endMonth = end2/100%100;
        int endYear = end2/10000;
        int judgeRun = runYear(dateYear);
        if(judgeRun == 1)  month_day[1] = 29;
        int judgeLeg = judge_l(dateMonth,dateDay,date2);
        if(judgeLeg==0)
        {
            System.out.println(date+"无效!");
        }else {
            if(judgeRun == 1) System.out.println(date+"是闰年.");
            int sum_day = daysOfYear(dateMonth, dateDay);
            LocalDate startDate = LocalDate.of(2000,01,02);
            LocalDate endDate = LocalDate.of(dateYear,dateMonth,dateDay);
            long days = Math.abs(ChronoUnit.DAYS.between(startDate, endDate))%7;
            if(days==0) days = 7;
            System.out.println(date + "是当年的第" + sum_day + "天,当月第" + dateDay + "天,当周第" + days+"天.");
        }
        judgeRun = runYear(startYear);
        if(judgeRun == 0)  month_day[1] = 28;
        int judgeLegS = judge_l(startMonth,startDay,start2);
        judgeRun = runYear(startYear);
        if(judgeRun == 0)  month_day[1] = 28;
        if(judgeRun == 1) month_day[1] = 29;
        int judgeLegE = judge_l(startMonth,startDay,end2);
        if(judgeLegS==0||judgeLegE==0)
            System.out.println(start + "或" + end + "中有不合法的日期.");
        else if(start2>end2)
        {
            System.out.println(end+"早于"+start+",不合法!");
        }
        else
        {
            int yearSub = endYear - startYear;
            int monthSub = endMonth - startMonth;
            LocalDate startDate = LocalDate.of(startYear,startMonth,startDay);
            LocalDate endDate = LocalDate.of(endYear,endMonth,endDay);
            long days = ChronoUnit.DAYS.between(startDate, endDate);
            System.out.print(end+"与"+start+"之间相差"+days+"天,所在月份相差"+monthSub+",所在年份相差"+yearSub+".");
        }
    }
    public static String number(String str) //字符串转化为数字
    {
        str=str.trim();
        String str2="";
        if(str != null && !"".equals(str))
        {
            for(int i=0;i<str.length();i++)
            {
                if(str.charAt(i)>=48 && str.charAt(i)<=57)
                {
                    str2+=str.charAt(i);
                }
            }
        }
        return str2;
    }
    public static int runYear(int year)//判断闰年
    {
        int run = 0;
        if((0 == year % 4 && year % 100 != 0) || (0 == year % 400))
        {
            run = 1;
        }
        return run;
    }
    public static int daysOfYear(int month,int day)//当年的第几天
    {
        int sum=0;
        for(int i=0;i<month-1;i++)
        {
            sum += month_day[i];
        }
        sum += day;
        return sum;
    }
    public static int judge_l(int month,int day,int whole)
    {
        int oka = 0;
        if(whole<100000000&&whole>=10000000) {
            if (day >= 1 && day <= month_day[month - 1]) {
                return oka = 1;
            } else {
                return oka = 0;
            }
        }else return oka;


    }
}

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白衣林子诺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值