package com.yh.emmm.pattern;
import java.time.LocalDate;
/**
* 计算两个日期之间的天数
*
* @author 枫茗丿love
*/
public class CountDaysUtils {
/**
* 两个日期之间的天数
*
* @param start
* @param end
* @return
*/
public static int betweenDays(LocalDate start, LocalDate end) {
int sy = start.getYear();
int ey = end.getYear();
int days;
if (sy < ey) {
days = start.lengthOfYear() - start.getDayOfYear();
for (int i = sy + 1; i < ey; i++) {
days += LocalDate.of(i, 12, 31).lengthOfYear();
}
days += end.getDayOfYear();
} else if (sy == ey) {
days = end.getDayOfYear() - start.getDayOfYear();
} else {
days = end.lengthOfYear() - end.getDayOfYear();
for (int i = ey + 1; i < sy; i++) {
days += LocalDate.of(i, 12, 31).lengthOfYear();
}
days += start.getDayOfYear();
days = -days;
}
return days;
}
/**
* 推算日期(当前日期以前或以后多少天)
*
* @param date 初始日期
* @param days (-n~n)
* @return 目标日期
*/
public static LocalDate reckonDate(LocalDate date, Integer days) {
if (days >= 0)
return date.plusDays(days);
else
return date.minusDays(-days);
}
/**
* 判断是否闰年
*
* @param year
* @return
*/
public static boolean isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return true;
return false;
}
/**
* 统计目标日期到年底的天数
*
* @param date
* @return
*/
private static int remainMonth(LocalDate date) {
return monthDays(date, true);
}
/**
* 统计目标日期到年初的天数
*
* @param date
* @return
*/
private static int passMonth(LocalDate date) {
return monthDays(date, false);
}
private static int monthDays(LocalDate date, boolean i) {
if (i)
return date.lengthOfYear() - date.getDayOfYear();
return date.getDayOfYear();
}
}
转载至链接:/u/3087202/blog/1928179