package xiaozhi.common.utils;
|
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.time.ZoneId;
|
import java.time.temporal.ChronoUnit;
|
import java.util.Date;
|
|
/**
|
* 日期处理
|
* Copyright (c) 人人开源 All rights reserved.
|
* Website: https://www.renren.io
|
*/
|
public class DateUtils {
|
/**
|
* 时间格式(yyyy-MM-dd)
|
*/
|
public final static String DATE_PATTERN = "yyyy-MM-dd";
|
/**
|
* 时间格式(yyyy-MM-dd HH:mm:ss)
|
*/
|
public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
|
public final static String DATE_TIME_MILLIS_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS";
|
|
|
/**
|
* 日期格式化 日期格式为:yyyy-MM-dd
|
*
|
* @param date 日期
|
* @return 返回yyyy-MM-dd格式日期
|
*/
|
public static String format(Date date) {
|
return format(date, DATE_PATTERN);
|
}
|
|
/**
|
* 日期格式化 日期格式为:yyyy-MM-dd
|
*
|
* @param date 日期
|
* @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN
|
* @return 返回yyyy-MM-dd格式日期
|
*/
|
public static String format(Date date, String pattern) {
|
if (date != null) {
|
SimpleDateFormat df = new SimpleDateFormat(pattern);
|
return df.format(date);
|
}
|
return null;
|
}
|
|
/**
|
* 日期解析
|
*
|
* @param date 日期
|
* @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN
|
* @return 返回Date
|
*/
|
public static Date parse(String date, String pattern) {
|
try {
|
return new SimpleDateFormat(pattern).parse(date);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
|
public static String getDateTimeNow() {
|
return getDateTimeNow(DATE_TIME_PATTERN);
|
}
|
|
public static String getDateTimeNow(String pattern) {
|
return format(new Date(), pattern);
|
}
|
|
public static String millsToSecond(long mills) {
|
return String.format("%.3f", mills / 1000.0);
|
}
|
|
/**
|
* 获取简短的时间字符串:10秒前返回刚刚,多少秒前,几小时前,超过一周返回年月日时分秒
|
* @param date
|
* @return
|
*/
|
public static String getShortTime(Date date) {
|
if (date == null) {
|
return null;
|
}
|
// 将 Date 转换为 Instant
|
LocalDateTime localDateTime = date.toInstant()
|
// 获取系统默认时区
|
.atZone(ZoneId.systemDefault())
|
// 转换为 LocalDateTime
|
.toLocalDateTime();
|
// 当前时间
|
LocalDateTime now = LocalDateTime.now();
|
// 时间差,单位为秒
|
long secondsBetween = ChronoUnit.SECONDS.between(localDateTime, now);
|
|
if (secondsBetween <= 10) {
|
return "刚刚";
|
} else if (secondsBetween < 60) {
|
return secondsBetween + "秒前";
|
} else if (secondsBetween < 60 * 60) {
|
return secondsBetween / 60 + "分钟前";
|
} else if (secondsBetween < 86400) {
|
return secondsBetween / 3600 + "小时前";
|
} else if (secondsBetween < 604800) {
|
return secondsBetween / 86400 + "天前";
|
} else {
|
// 超过一周,显示完整日期时间
|
return format(date,DATE_TIME_PATTERN);
|
}
|
}
|
}
|