package cn.ucmed.merger.util;
import org.apache.commons.lang.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 几秒前,几分钟前,几小时前,几天前,几月前,几年前的实现
*
* @author HJH
* @since 2017-11-17
**/
public class RelativeDateFormat {
private static final Long ONE_MINUTE = 60000L;
private static final Long TEN_MINUTE = 60000L * 10;
private static final Long ONE_HOUR = 3600000L;
private static final Long ONE_DAY = 86400000L;
private static final Long ONE_MONTH = ONE_DAY * 30;
private static final Long ONE_YEAR = ONE_DAY * 365;
private static final String JUST_NOW_MSG = "刚才";
private static final String MINUTE_MSG = "分钟前";
private static final String HOUR_MSG = "小时前";
private static final String DAY_MSG = "天前";
private static final String MONTH_MSG = "个月前";
private static final String YEAR_MSG = "年前";
public static String calculateTime(Date date) {
if (date == null) {
return null;
}
Long delta = System.currentTimeMillis() - date.getTime();
if (delta < TEN_MINUTE) {
return JUST_NOW_MSG;
}
if (delta < ONE_HOUR) {
return getMinutesMsg(delta);
}
if (delta < ONE_DAY) {
return getHoursMsg(delta);
}
if (delta < ONE_MONTH) {
return getDayMsg(delta);
}
if (delta < ONE_YEAR) {
return getMonthMsg(delta);
}
return getYearMsg(delta);
}
public static String calculateWaitTime(String time) {
if (StringUtils.isBlank(time)) {
return "-";
}
Long delta = Long.parseLong(time);
String waitTime;
if (delta < ONE_HOUR) {
waitTime = getMinutes(delta);
}else {
if (delta > ONE_HOUR * 15) {
delta = ONE_HOUR * 15;
}
waitTime = getHoursMsg(delta);
}
return waitTime.substring(0, waitTime.length() - 1);
}
private static String getMinutes(Long date) {
Long ten = date / ONE_MINUTE;
return ten + MINUTE_MSG;
}
private static String getMinutesMsg(Long date) {
Long ten = date / TEN_MINUTE;
return ten * 10 + MINUTE_MSG;
}
private static String getHoursMsg(Long date) {
Long one = date / ONE_HOUR;
return one + HOUR_MSG;
}
private static String getDayMsg(Long date) {
Long one = date / ONE_DAY;
return one + DAY_MSG;
}
private static String getMonthMsg(Long date) {
Long one = date / ONE_MONTH;
return one + MONTH_MSG;
}
private static String getYearMsg(Long date) {
Long one = date / ONE_YEAR;
return one + YEAR_MSG;
}
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;
}
public static void main(String[] args) throws ParseException {
Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2019-06-09");
String time = "1574845361000";
System.out.println(calculateTime(date));
System.out.println(calculateWaitTime(time));
}
}
关系时间工具类
作者:记性不好的阁主