验证中...
本周日【珠海源创会】一起聊聊:PingCAP分布式事务、支付宝移动端实践、GSBN技术框架选型,点此报名占座
计算两个日期指定属性的差距
原始数据 复制代码
/**
* 计算两个日期指定属性的差距
*
* @param date1 时间一
* @param date2 时间二
* @param field 指定属性,使用 Calendar 的常量
* @param scale 精确小数位数
* @return 差距
*/
public static BigDecimal dateDiff(Date date1, Date date2, int field, int scale) {
BigDecimal ms = BigDecimal.valueOf(date1.getTime() - date2.getTime());
switch (field) {
case Calendar.MILLISECOND:
return ms;
case Calendar.SECOND:
return ms.divide(BigDecimal.valueOf(1000), scale, RoundingMode.HALF_UP);
case Calendar.MINUTE:
return ms.divide(BigDecimal.valueOf(60_000), scale, RoundingMode.HALF_UP);
case Calendar.HOUR:
return ms.divide(BigDecimal.valueOf(3_600_000), scale, RoundingMode.HALF_UP);
case Calendar.DATE:
return ms.divide(BigDecimal.valueOf(86_400_000), scale, RoundingMode.HALF_UP);
case Calendar.WEEK_OF_MONTH:
case Calendar.WEEK_OF_YEAR:
return ms.divide(BigDecimal.valueOf(604_800_000), scale, RoundingMode.HALF_UP);
case Calendar.MONTH: // 30.5天
return ms.divide(BigDecimal.valueOf(2_635_200_000L), scale, RoundingMode.HALF_UP);
case Calendar.YEAR: // 365.25天
return ms.divide(BigDecimal.valueOf(31_557_600_000L), scale, RoundingMode.HALF_UP);
default:
return ms;
}
}

评论列表( 0 )

你可以在登录后,发表评论

搜索帮助

12_float_left_people 12_float_left_close