java工具类-计算相对时间的工具类即两个时间的时间差

java相对时间的工具类,此类中有两个暴露的方法,相对于当前时间的方法和相对于某时间的方法。
返回String,如:2小时前/3天2时13秒/昨天
具体请运行查看

(DateTimeFormatUtil.getStrDate(date, form);为将毫秒数转换为格式化日期的方法,自己编写)

package com.warmdoctor.service.util;

import java.util.Date;

/**
 *  Copyright   2016    CoderDream's Eclipse
 * 
 *  All right reserved.
 *  
 *  Created on 2016年8月5日 下午5:20:32
 *  
 *  Update on 2016年8月10日 下午2:18:29
 * 
 *  @author xiaoming
 *  
 *  @mail sgyingyin@sina.com
 * 
 *  @tags An overview of this file: 相对时间转换
 * 
 */
public class RelativeDateFormat {
    private static final long ONE_MINUTE = 60000L;
    private static final long ONE_HOUR = 3600000L;
    private static final long ONE_DAY = 86400000L;
    private static final long ONE_WEEK = 604800000L;

    private static final String ONE_SECOND_CN = "秒";
    private static final String ONE_MINUTE_CN = "分钟";
    private static final String ONE_HOUR_CN = "小时";
    private static final String ONE_DAY_CN = "天";
    private static final String ONE_MONTH_CN = "月";
    private static final String ONE_YEAR_CN = "年";

    private static final String ONE_AGO = "前";

    /**
     * @author xiaoming 2016年8月5日
     * @describe    相对于当前时间
     * @param date
     * @return
     * @returnType String
     */
    public static String format(Date date) {
        if(date == null)
            date = new Date();
        long delta = new Date().getTime() - date.getTime();
        if (delta < 1L * ONE_MINUTE) {
            long seconds = toSeconds(delta);
            return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_CN + ONE_AGO;
        }
        if (delta < 45L * ONE_MINUTE) {
            long minutes = toMinutes(delta);
            return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_CN + ONE_AGO;
        }
        if (delta < 24L * ONE_HOUR) {
            long hours = toHours(delta);
            return (hours <= 0 ? 1 : hours) + ONE_HOUR_CN + ONE_AGO;
        }
        if (delta < 48L * ONE_HOUR) {
            return "昨天";
        }
        if (delta < 30L * ONE_DAY) {
            long days = toDays(delta);
            return (days <= 0 ? 1 : days) + ONE_DAY_CN + ONE_AGO;
        }
        if (delta < 12L * 4L * ONE_WEEK) {
            long months = toMonths(delta);
            return (months <= 0 ? 1 : months) + ONE_MONTH_CN + ONE_AGO;
        } else {
            long years = toYears(delta);
            return (years <= 0 ? 1 : years) + ONE_YEAR_CN + ONE_AGO;
        }
    }

    /**
     * @author xiaoming 2016年8月5日
     * @describe    相对于某个时间, 计算时间差
     * @param date
     * @param ofDate 最后时间
     * @return
     * @returnType String
     */
    public static String formatOfDate(Date date, Date ofDate) {
        if(date == null)
            date = new Date();
        if(ofDate == null)
            ofDate = new Date();
        long delta = ofDate.getTime() - date.getTime();
        delta = Math.abs(delta);
        long s = toSeconds(delta);
        long min = toMinutes(delta);
        long hour = toHours(delta);
        long day = toDays(delta);
        long month = toMonths(delta);
        long year = toYears(delta);
        if(year > 0)
            return DateTimeFormatUtil.getStrDate(delta, "yyyy年MM月dd天HH时mm分ss秒");
        if(month > 0)
            return DateTimeFormatUtil.getStrDate(delta, "MM月dd天HH时mm分ss秒");
        if(day > 0)
            return DateTimeFormatUtil.getStrDate(delta, "dd天HH时mm分ss秒");
        if(hour > 0)
            return DateTimeFormatUtil.getStrDate(delta, "HH时mm分ss秒");
        if(min > 0)
            return DateTimeFormatUtil.getStrDate(delta, "mm分ss秒");
        return s + ONE_SECOND_CN;
    }

    private static long toSeconds(long date) {
        return date / 1000L;
    }

    private static long toMinutes(long date) {
        return toSeconds(date) / 60L;
    }

    private static long toHours(long date) {
        return toMinutes(date) / 60L;
    }

    private static long toDays(long date) {
        return toHours(date) / 24L;
    }

    private static long toMonths(long date) {
        return toDays(date) / 30L;
    }

    private static long toYears(long date) {
        return toMonths(date) / 365L;
    }
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值