package com.toy.utils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* 计算两个日期之间的天数
*
* @author 枫茗丿love
*
*/
public class CountDaysUtils {
private static final int[] MONTH_DAYS = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
public static int getBetweenDays(LocalDate startDate, LocalDate endDate) {
String startDateStr = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String endDateStr = endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String[] startDateStrs = startDateStr.split("-");
String[] endDateStrs = endDateStr.split("-");
int days = 0;
int startYear = Integer.parseInt(startDateStrs[0]);
int startMonth = Integer.parseInt(startDateStrs[1]);
int startDay = Integer.parseInt(startDateStrs[2]);
int endYear = Integer.parseInt(endDateStrs[0]);
int endMonth = Integer.parseInt(endDateStrs[1]);
int endDay = Integer.parseInt(endDateStrs[2]);
if (endYear >= startYear) {
if (endYear == startYear) {
if (endMonth < startMonth) {
return -1;
}
if (endMonth == startMonth) {
if (endDay < startDay) {
return -1;
} else {
days = endDay - startDay;
}
}
if (endMonth > startMonth) {
days = endDay + MONTH_DAYS[startMonth - 1] - startDay;
for (int month = startMonth; month < endMonth - 1; month++) {
if (((startYear % 4 == 0 && startYear % 100 != 0) || startYear % 400 == 0) && month == 1) {
days += 29;
} else {
days += MONTH_DAYS[month];
}
}
}
} else {
days = endDay;
for (int month = 0; month < endMonth - 1; month++) {
if (((endYear % 4 == 0 && endYear % 100 != 0) || endYear % 400 == 0) && month == 1) {
days += 29;
} else {
days += MONTH_DAYS[month];
}
}
for (int year = startYear + 1; year < endYear; year++) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
days += 366;
} else {
days += 365;
}
}
int days2 = startDay;
for (int month = 0; month < startMonth - 1; month++) {
if (((startYear % 4 == 0 && startYear % 100 != 0) || startYear % 400 == 0) && month == 1) {
days2 += 29;
} else {
days2 += MONTH_DAYS[month];
}
}
if (((startYear % 4 == 0 && startYear % 100 != 0) || startYear % 400 == 0)) {
days2 = 366 - days2;
} else {
days2 = 365 - days2;
}
days += days2;
}
return days;
} else
return -1;
}
}
计算两个日期之间相隔天数
猜你喜欢
转载自blog.csdn.net/yan50050/article/details/78645288
今日推荐
周排行