用Java jdk 1.8 代码计算2个时间之间相差了几年几个月几天,返回结果是字符串的形式。下面是实现代码,测试代码,测试结果截图,代码分享链接。
/**
* 格式化2个时间的间隔
*
* @param start 开始时间
* @param end 结束时间
* @return 两个时间之间的间隔
*/
public static String between(LocalDate start, LocalDate end) {
long betweenDay = end.toEpochDay() - start.toEpochDay();
if (betweenDay < 0) {
return "开始时间大于结束时间,所传参数不OK。。。。";
}
int year = end.getYear() - start.getYear();
int month = end.getMonth().getValue() - start.getMonth().getValue();
int day = end.getDayOfMonth() - start.getDayOfMonth();
if (day < 0) {
month = month - 1;
boolean leapYear = end.getYear() % 4 == 0;
if (end.getMonth() == Month.JANUARY) {
leapYear = (end.getYear() - 1) % 4 == 0;
}
day = day + end.getMonth().minus(1).length(leapYear);
}
if (month < 0) {
year = year - 1;
month = month + 12;
}
StringBuilder stringBuilder = new StringBuilder();
if (year > 0) {
stringBuilder.append(year).append(" 年 ");
}
if (month > 0) {
stringBuilder.append(month).append(" 月 ");
}
if (day > 0) {
stringBuilder.append(day).append(" 天");
}
return stringBuilder.toString();
}
实际测试代码:
/**
* 计算2个时间相差多久
*
* @author LiXuekai on 2019/9/10
*/
public class GetBetweenDaysTest {
private LocalDate start;
private LocalDate end;
@Before
public void init() {
end = LocalDate.now();
}
/**
* 测试这个util方法OK不
*/
@Test
public void test() {
// 边界测试
end = LocalDate.of(2020, 3, 1);
start = LocalDate.of(2020, 2, 29);
System.out.println(TimeUtils.between(start, end));
}
}
测试结果截图:
代码分享地址链接: