java:获取两个日期相隔天数
1 LocalDateTime使用
package com.xiaoxu.tool.demo;
import org.springframework.lang.NonNull;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
/**
* @author xiaoxu
* @date 2022-09-26
* spring_boot:com.xiaoxu.tool.demo.DateUtilDemo
*/
public class DateUtilDemo {
private static final String pattern = "yyyyMMdd";
private static final ThreadLocal<SimpleDateFormat> sdf = ThreadLocal.withInitial(()-> new SimpleDateFormat(pattern));
public static long getDiffDays(@NonNull Date date1, @NonNull Date date2){
LocalDateTime l1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println(l1);
LocalDateTime l2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println(l2);
if(l1.isAfter(l2)){
System.out.println("l1在l2后面");
LocalDateTime temp;
temp = l2;
l2 = l1;
l1 = temp;
}else{
System.out.println("l1在l2前面");
}
Duration between = Duration.between(l1, l2);
System.out.println("天数:"+between.toDays());
return between.toDays();
}
public static Date parseDateStr(String dateStr){
if(dateStr.length()!=pattern.length()){
throw new RuntimeException("日期格式有误,"+dateStr);
}
Date d = null;
try {
d = sdf.get().parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return d;
}
public static void main(String[] args) {
getDiffDays(parseDateStr("20220801"),parseDateStr("20220901"));
getDiffDays(parseDateStr("20220902"),parseDateStr("20220801"));
}
}
执行结果:
2022-08-01T00:00
2022-09-01T00:00
l1在l2前面
天数:31
2022-09-02T00:00
2022-08-01T00:00
l1在l2后面
天数:32
2 Calendar和LocalDateTime比对使用
package com.xiaoxu.tool.demo;
import org.springframework.lang.NonNull;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
/**
* @author xiaoxu
* @date 2022-09-26
* spring_boot:com.xiaoxu.tool.demo.DateUtilDemo
*/
public class DateUtilDemo {
private static final String pattern = "yyyyMMdd";
private static final ThreadLocal<SimpleDateFormat> sdf = ThreadLocal.withInitial(()-> new SimpleDateFormat(pattern));
public static long getDiffDaysByCalendar(@NonNull Date date1, @NonNull Date date2){
if(date1.after(date2)){
Date temp;
temp = date2;
date2 = date1;
date1 = temp;
}
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
start.setTime(date1);
end.setTime(date2);
// int da1 = start.getActualMaximum(Calendar.DAY_OF_YEAR);
// int da3 = start.get(Calendar.DAY_OF_YEAR);
// int da2 = end.getActualMaximum(Calendar.DAY_OF_YEAR);
// int da4 = end.get(Calendar.DAY_OF_YEAR);
// System.out.println(da1);
// System.out.println(da3);
//
// System.out.println(da2);
// System.out.println(da4);
int endYear = end.get(Calendar.YEAR);
int startYear = start.get(Calendar.YEAR);
int sub = endYear - startYear;
int days = end.get(Calendar.DAY_OF_YEAR)-start.get(Calendar.DAY_OF_YEAR);
while(sub>0){
days += start.getActualMaximum(Calendar.DAY_OF_YEAR);
start.add(Calendar.YEAR,1);
sub-=1;
}
System.out.println("Calendar计算出的天数:"+days);
return days;
}
public static long getDiffDays(@NonNull Date date1, @NonNull Date date2){
LocalDateTime l1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
// System.out.println(l1);
LocalDateTime l2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
// System.out.println(l2);
if(l1.isAfter(l2)){
System.out.println("l1在l2后面");
LocalDateTime temp;
temp = l2;
l2 = l1;
l1 = temp;
}else{
System.out.println("l1在l2前面");
}
Duration between = Duration.between(l1, l2);
System.out.println("LocalDateTime计算出的天数:"+between.toDays());
return between.toDays();
}
public static Date parseDateStr(String dateStr){
if(dateStr.length()!=pattern.length()){
throw new RuntimeException("日期格式有误,"+dateStr);
}
Date d = null;
try {
d = sdf.get().parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return d;
}
public static void main(String[] args) {
getDiffDays(parseDateStr("20220801"),parseDateStr("20220901"));
getDiffDays(parseDateStr("20220902"),parseDateStr("20220801"));
System.out.println("********************************");
getDiffDaysByCalendar(parseDateStr("20220801"),parseDateStr("20220901"));
getDiffDays(parseDateStr("20220801"),parseDateStr("20220901"));
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
getDiffDaysByCalendar(parseDateStr("20220102"),parseDateStr("20210801"));
getDiffDays(parseDateStr("20220102"),parseDateStr("20210801"));
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
getDiffDaysByCalendar(parseDateStr("20220902"),parseDateStr("20210801"));
getDiffDays(parseDateStr("20220902"),parseDateStr("20210801"));
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
getDiffDaysByCalendar(parseDateStr("20220902"),parseDateStr("20040801"));
getDiffDays(parseDateStr("20220902"),parseDateStr("20040801"));
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
getDiffDaysByCalendar(parseDateStr("20200902"),parseDateStr("20040801"));
getDiffDays(parseDateStr("20200902"),parseDateStr("20040801"));
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
getDiffDaysByCalendar(parseDateStr("20200902"),parseDateStr("20050801"));
getDiffDays(parseDateStr("20200902"),parseDateStr("20050801"));
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
getDiffDaysByCalendar(parseDateStr("20200902"),parseDateStr("20200906"));
getDiffDays(parseDateStr("20200902"),parseDateStr("20200906"));
}
}
执行结果如下:
l1在l2前面
LocalDateTime计算出的天数:31
l1在l2后面
LocalDateTime计算出的天数:32
********************************
Calendar计算出的天数:31
l1在l2前面
LocalDateTime计算出的天数:31
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:154
l1在l2后面
LocalDateTime计算出的天数:154
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:397
l1在l2后面
LocalDateTime计算出的天数:397
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:6606
l1在l2后面
LocalDateTime计算出的天数:6606
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:5876
l1在l2后面
LocalDateTime计算出的天数:5876
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:5511
l1在l2后面
LocalDateTime计算出的天数:5511
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:4
l1在l2前面
LocalDateTime计算出的天数:4