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;
}
}