//for循环的应用 package com.softeem.jbs; import java.util.Scanner; public class Pt11 { public static void getDays(){ Scanner scanner=new Scanner(System.in); System.out.println("从键盘输入一个开始年份月份:"); int x1= scanner.nextInt(); int m1=scanner.nextInt(); System.out.println("从键盘输入一个年份,月份:"); int x2= scanner.nextInt(); int m2=scanner.nextInt(); if(x1>x2 ||(x1==x2 && m1>m2)){ System.out.println("结束日期不能小于开始日期"); getDays(); return; } //获取日期之间总天数 int days=getDateRangeDays(x1,m1,x2,m2); System.out.printf("%d年%d月到%d年%d月总共%d天",x1,m1,x2,m2,days); } /** * 判断是否为闰年 * @param year * @return */ public static boolean isLeadYear(int year){ return year%400==0 ||(year%4==0 &&year%100!=0); } /** * 根据目标年份获取该月总天数 * @param y * @param m * @return */ public static int getDayOfMonth(int y,int m){ switch (m){ case 2: return isLeadYear(y)?29:28; case 4: case 6: case 9: case 11: return 30; default: return 31; } } /** * 计算两个年月之间的总天数 * @param x1 * @param m1 * @param x2 * @param m2 * @return */ private static int getDateRangeDays(int x1, int m1, int x2, int m2) { int totalDays=0; if(x2-x1>=1){ for (int i=m1;i<=12;i++){ totalDays+=getDayOfMonth(x1,i); } //计算结束年份1月到目标月份总天数 for (int i = 1; i <=m2 ; i++) { totalDays+=getDayOfMonth(x2,i); } //整年计算 for (int i = x1+1; i <x2 ; i++) { totalDays+=isLeadYear(i)?366:365; } } //同一个年份的日期 if(x2-x1>1){ //计算开始年份月份到12月份的总天数 for (int i = m1; i <=12 ; i++) { totalDays+=getDayOfMonth(x1,i); } //计算结束年份1月到目标月份的总天数 for (int i = 1; i <m2 ; i++) { totalDays+=getDayOfMonth(x2,i); } } if(x1-x2==0){ for (int i = 1; i < m2; i++) { totalDays+=getDayOfMonth(x1,i); } } return totalDays; } public static void main(String[] args) { getDays(); } }
从键盘输入年份,月份,结合当前年份,月份,输出两者之间的天数
于 2023-06-28 15:00:01 首次发布