Java 计算2个时间相差多少年,多少个月,多少天的几种方式

JSON 2017-12-21 01:23:36 157208

一、Java 时间比较需求

1.A时间到B时间,相差多少年,月,日。

如:2011-02-02 到  2017-03-02 ,结果为:

 *  相差 6年,1个月,0天

2.A时间到B时间, 相差年,月,日各是多少。

如:2011-02-02 到  2017-03-02,结果为:

 *  以年为单位相差为:6

 *  以月为单位相差为:73个月

 *  以日为单位相差为:2220

3.A时间到B时间,相差多少年

如:2011-02-02 到  2017-03-02,结果大约为:  

 * 6.1

这个需求体现在如我加入公司 3 年 6 个月,也可以说是3.5年。

不多说,看代码。

二、Java 时间代码实现

日期比较对象 DayCompare 代码用到了   lombok  回头会讲到。如果你不用,其实就是把getter / setter方法自己写一遍,还有构造方法。

@Data
@Builder
public static class DayCompare{
    private int year;
    private int month;
    private int day;
}

2.1 A时间到B时间,相差多少年,月,日。

/**
 * 计算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.2 A时间到B时间, 相差年,月,日各是多少

/**
 * 计算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.3 A时间到B时间,相差多少年

/**
 * 计算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);
}

因为写到了,就分享出来一下。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/260.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
Java 计算2时间相差多少年多少个月多少几种方式
Java SHA1的几种实现方式Java SHA1 签名
Java获取浏览器请求头(User-Agent),分析浏览器信息,系统信息的几种办法。
dns-prefetch对网站速度能提升有多少?详解dns-prefetch。
Java客户端Jedis 对Redis的的八调用方式(事务、管道、分布式)介绍及测试
万年历—Java计算感恩节是哪天?感恩节是哪一?2017年感恩节是哪一
万年历—Java计算父亲节是哪天?父亲节是哪一?2017年的父亲节是哪一
万年历—Java计算母亲节是哪天?母亲节是哪一? 2017年母亲节是哪一
Java对文件CRC32值计算
Freemarker静态化加载模板的三方式
最新文章
Flink 在又拍云日志批处理中的实践 7412
个推异常值检测和实战应用-又拍云 1400
TCP 和 UDP协议详细讲解,优缺点分析讲解 7602
URL中乱七八糟的字符讲解,来源以及如何解决 4761
HTTP/3 来了,您真的了解它么? 5962
技术选型:为什么批处理我们却选择了Flink 2220
这些表情包你有吗?一起来 Battle 啊 3181
当我谈 HTTP 时,我谈些什么? 11525
新浪短链(t.cn)最新申请官方API的方法讲解。 72096
QUIC / HTTP3 协议详细分析讲解 10173
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 650850
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 598494
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 494843
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 487635
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 481889
Elasticsearch教程(四) elasticsearch head 插件安装和使用 442444
免费天气API,天气JSON API,不限次数获取十五天的天气预报 247158
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 225404
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 202063
Elasticsearch教程(一),全程直播(小白级别) 190163
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...