- 给定一个日期,判定是否为合法日期。如果合法,判断该年是否闰年,该日期是当年第几天、当月第几天、当周第几天、。
- 给定起始日期与结束日期,判定日期是否合法且结束日期是否早于起始日期。如果均合法,输出结束日期与起始日期之间的相差的天数、月数、念书。
输入格式:
第一行输入一个日期字符串,格式为"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;
}
}