Java计算两个日期之间的天数

package exercise;

import java.util.Scanner;

public class PerCalender {
	public static void main(String[] args) {
		//输入初始日期
		Scanner s1 = new Scanner(System.in);
		System.out.println("请输入初始日期(yyyy-MM-dd):");
		String StartDate = s1.nextLine();
		//输入截止日期
		Scanner s2 = new Scanner(System.in); 
		System.out.println("请输入截止日期(yyyy-MM-dd):");
		String EndDate = s2.nextLine();
		
		PerCalender a = new PerCalender();
		String result = a.NumberOfDays(StartDate,EndDate);
//		System.out.println("初始日期到截止日期之间经过了 " + days + " 天!");
		System.out.println(result);
	}

	/**
	 * 求初始日期到截止日期之间的天数
	 * 
	 * @param s1
	 * 		初始日期
	 * @param s2
	 * 		截止日期
	 */
	public String NumberOfDays(String s1,String s2){
		int MonthDays[][] = new int[][]{{1,2,3,4,5,6,7,8,9,10,11,12},{31,28,31,30,31,30,31,31,30,31,30,31}};
		
		//解析初始日期年、月、日
		int year1 = Integer.parseInt(s1.substring(0, s1.indexOf("-")));
		int month1 = Integer.parseInt(s1.substring(s1.indexOf("-")+1,s1.lastIndexOf("-")));
		int day1 = Integer.parseInt(s1.substring(s1.lastIndexOf("-")+1,s1.length()));
		
		//解析截止日期年、月、日
		int year2 = Integer.parseInt(s2.substring(0, s2.indexOf("-")));
		int month2 = Integer.parseInt(s2.substring(s2.indexOf("-")+1,s2.lastIndexOf("-")));
		int day2 = Integer.parseInt(s2.substring(s2.lastIndexOf("-")+1,s2.length()));
		
		//获取闰年个数
		int NumberOfLeapYears = 0;
		for (int i = (year1 + 1);i < year2;i++){
			if(IsLeapYear(i))
				NumberOfLeapYears++;
		}
		
		//初始日期到截止日期的整年数
		int years = year2 - year1 - 1;	
		
		//初始日期这一年剩余的天数

		int daysOfSurplusYear1 = MonthDays[1][month1 - 1] - day1 + 1;

		if(IsLeapYear(year1)){
			if(month1 <= 2)
				daysOfSurplusYear1++;
		}
		for(int i = (month1 + 1);i < 13;i++){
			daysOfSurplusYear1 += MonthDays[1][i - 1];
		}
		//截止日期这一年过去的天数
		int daysOfPassYear2 = day2;
		if(IsLeapYear(year2)){
			if((month2 > 2) || ((month2 == 2) && (day2 == 29)))
				daysOfPassYear2++;
		}
		for(int i = (month2 - 1);i > 0;i--){
			daysOfPassYear2 += MonthDays[1][i - 1];
		}
		
		return "初始日期到截止日期之间经过了 " + (365 * years + daysOfSurplusYear1 + daysOfPassYear2 + NumberOfLeapYears) + " 天!" ;
	}
	
	/**
	 * 判断是否是闰年
	 * 
	 * @param year
	 * 		输入的年份
	 */
	public boolean IsLeapYear(int year){
		if((year % 4) == 0){
			if((year % 100) == 0){
				if((year %400) == 0)
					return true;
				return false;
			}
			return true;
		}else
			return false;		
	}
}


在这里我没有判断输入是否正确,仅供参考

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值