计算日期天数差值

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class DaysBetweenTwoDate {

    public static boolean isLeapYear(int year){
        if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
            return true;
        return false;
    }

    public static int getDayInYear(String date){
        int result = 0;
        int[] months = {31,28,31,30,31,30,31,31,30,31,30,31};
        String[] nums = date.split("-");
        int year = Integer.valueOf(nums[0]);
        int month = Integer.valueOf(nums[1]);
        int day = Integer.valueOf(nums[2]);

        if(isLeapYear(year))
            months[1] = 29;

        for(int i = 0; i < month-1; i++)
            result += months[i];

        result += day;
        return result;
    }

    public static int getDaysBetweenTwoDates(String date1, String date2){

        int year1 = Integer.valueOf(date1.split("-")[0]);
        int month1 = Integer.valueOf(date1.split("-")[1]);
        int day1 = Integer.valueOf(date1.split("-")[2]);

        int year2 = Integer.valueOf(date2.split("-")[0]);
        int month2 = Integer.valueOf(date2.split("-")[1]);
        int day2 = Integer.valueOf(date2.split("-")[2]);

        if(year1 == year2){
            return getDayInYear(date2) - getDayInYear(date1) + 1;
        }

        int beforeYear1Days = (isLeapYear(year1) ? 366 - getDayInYear(date1) : 365 - getDayInYear(date1));

        int betweenTwoYearDays = 0;
        for(int diffYear = year1 + 1; diffYear < year2; diffYear++)
            betweenTwoYearDays += (isLeapYear(diffYear)  ? 366 : 365);

        int afterYear2Days = getDayInYear(date2);

        return beforeYear1Days + betweenTwoYearDays + afterYear2Days;
    }

    public static void main(String[] args){
        System.out.println(getDaysBetweenTwoDates("2014-6-6", "2016-7-28"));
        System.out.println(ChronoUnit.DAYS.between(LocalDateTime.of(2014,6,6,12,12), LocalDateTime.of(2016,7,28,12,12)));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值