转:Java 计算2个时间相差多少年,多少个月,多少天的几种方式
日期比较对象 DayCompare
代码用到了 lombok ,如果不用,其实就是把getter / setter
方法自己写一遍,还有构造方法。
@Data @Builder public static class DayCompare{ private int year; private int month; private int day; }
/** * 计算2个日期之间相差的 相差多少年月日 * 比如:2011-02-02 到 2017-03-02 相差 6年,1个月,0天 * @param fromDate * @param toDate * @return */ public static DayCompare dayComparePrecise(Date fromDate,Date toDate){ Calendar from = Calendar.getInstance(); from.setTime(fromDate); Calendar to = Calendar.getInstance(); to.setTime(toDate); int fromYear = from.get(Calendar.YEAR); int fromMonth = from.get(Calendar.MONTH); int fromDay = from.get(Calendar.DAY_OF_MONTH); int toYear = to.get(Calendar.YEAR); int toMonth = to.get(Calendar.MONTH); int toDay = to.get(Calendar.DAY_OF_MONTH); int year = toYear - fromYear; int month = toMonth - fromMonth; int day = toDay - fromDay; return DayCompare.builder().day(day).month(month).year(year).build(); }
/** * 计算2个日期之间相差的 以年、月、日为单位,各自计算结果是多少 * 比如:2011-02-02 到 2017-03-02 * 以年为单位相差为:6年 * 以月为单位相差为:73个月 * 以日为单位相差为:2220天 * @param fromDate * @param toDate * @return */ public static DayCompare dayCompare(Date fromDate,Date toDate){ Calendar from = Calendar.getInstance(); from.setTime(fromDate); Calendar to = Calendar.getInstance(); to.setTime(toDate); //只要年月 int fromYear = from.get(Calendar.YEAR); int fromMonth = from.get(Calendar.MONTH); int toYear = to.get(Calendar.YEAR); int toMonth = to.get(Calendar.MONTH); int year = toYear - fromYear; int month = toYear * 12 + toMonth - (fromYear * 12 + fromMonth); int day = (int) ((to.getTimeInMillis() - from.getTimeInMillis()) / (24 * 3600 * 1000)); return DayCompare.builder().day(day).month(month).year(year).build(); }
/** * 计算2个日期相差多少年 * 列:2011-02-02 ~ 2017-03-02 大约相差 6.1 年 * @param fromDate * @param toDate * @return */ public static String yearCompare(Date fromDate,Date toDate){ DayCompare result = dayComparePrecise(fromDate, toDate); double month = result.getMonth(); double year = result.getYear(); //返回2位小数,并且四舍五入 DecimalFormat df = new DecimalFormat("######0.0"); return df.format(year + month / 12); }
转自:https://www.sojson.com/blog/260.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)