From 675b1560948ba5c5baaf85e26c69150201825cf7 Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <1179705413@qq.com> Date: Sat, 12 Jul 2025 14:08:42 +0800 Subject: [PATCH] =?UTF-8?q?perf(novel-front):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=AF=84=E8=AE=BA=E6=97=B6=E9=97=B4=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java2nb/novel/core/utils/DateUtil.java | 41 +++++++++++++++++++ .../serialize/TimeAgoFormatSerialize.java | 23 +++++++++++ .../java2nb/novel/vo/BookCommentReplyVO.java | 5 +-- .../com/java2nb/novel/vo/BookCommentVO.java | 9 +++- .../resources/templates/book/book_detail.html | 2 +- 5 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 novel-front/src/main/java/com/java2nb/novel/core/serialize/TimeAgoFormatSerialize.java diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/DateUtil.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/DateUtil.java index c41bb36..2d09f9c 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/utils/DateUtil.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/utils/DateUtil.java @@ -106,6 +106,47 @@ public class DateUtil { } + /** + * 将日期格式化成"多久之前"的格式 + * */ + public static String formatTimeAgo(Date date){ + if (date == null) { + return null; + } + + long now = new Date().getTime(); + long then = date.getTime(); + + long diff = now - then; + + if (diff < 0) { + // 未来时间 + DateUtil.formatDate(date, DateUtil.DATE_TIME_PATTERN); + } + + long seconds = diff / 1000; + long minutes = seconds / 60; + long hours = minutes / 60; + long days = hours / 24; + long months = days / 30; + long years = months / 12; + + if (seconds < 60) { + return "刚刚"; + } else if (minutes < 60) { + return minutes + "分钟前"; + } else if (hours < 24) { + return hours + "小时前"; + } else if (days < 30) { + return days + "天前"; + } else if (months < 12) { + return months + "个月前"; + } else { + return years + "年前"; + } + } + + public static void main(String[] args) { System.out.println(formatDate(getYesterday(),DATE_TIME_PATTERN)); System.out.println(formatDate(getDateStartTime(getYesterday()),DATE_TIME_PATTERN)); diff --git a/novel-front/src/main/java/com/java2nb/novel/core/serialize/TimeAgoFormatSerialize.java b/novel-front/src/main/java/com/java2nb/novel/core/serialize/TimeAgoFormatSerialize.java new file mode 100644 index 0000000..4a4d8c6 --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/core/serialize/TimeAgoFormatSerialize.java @@ -0,0 +1,23 @@ +package com.java2nb.novel.core.serialize; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.java2nb.novel.core.utils.DateUtil; +import org.apache.commons.lang3.StringUtils; + +import java.io.IOException; +import java.util.Date; + +public class TimeAgoFormatSerialize extends JsonSerializer { + + @Override + public void serialize(Date s, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) + throws IOException { + + if (s != null) { + jsonGenerator.writeString(DateUtil.formatTimeAgo(s)); + } + + } +} \ No newline at end of file diff --git a/novel-front/src/main/java/com/java2nb/novel/vo/BookCommentReplyVO.java b/novel-front/src/main/java/com/java2nb/novel/vo/BookCommentReplyVO.java index 42d75be..a6f6166 100644 --- a/novel-front/src/main/java/com/java2nb/novel/vo/BookCommentReplyVO.java +++ b/novel-front/src/main/java/com/java2nb/novel/vo/BookCommentReplyVO.java @@ -1,9 +1,8 @@ package com.java2nb.novel.vo; -import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.java2nb.novel.core.serialize.CommentUserNameSerialize; -import com.java2nb.novel.entity.BookComment; +import com.java2nb.novel.core.serialize.TimeAgoFormatSerialize; import com.java2nb.novel.entity.BookCommentReply; import lombok.Data; @@ -20,7 +19,7 @@ public class BookCommentReplyVO extends BookCommentReply { private String createUserPhoto; - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = TimeAgoFormatSerialize.class) private Date createTime; private Long likesCount; diff --git a/novel-front/src/main/java/com/java2nb/novel/vo/BookCommentVO.java b/novel-front/src/main/java/com/java2nb/novel/vo/BookCommentVO.java index 893d616..22ecd3b 100644 --- a/novel-front/src/main/java/com/java2nb/novel/vo/BookCommentVO.java +++ b/novel-front/src/main/java/com/java2nb/novel/vo/BookCommentVO.java @@ -1,8 +1,9 @@ package com.java2nb.novel.vo; -import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.java2nb.novel.core.serialize.CommentUserNameSerialize; +import com.java2nb.novel.core.serialize.TimeAgoFormatSerialize; +import com.java2nb.novel.core.utils.DateUtil; import com.java2nb.novel.entity.BookComment; import lombok.Data; @@ -19,13 +20,17 @@ public class BookCommentVO extends BookComment { private String createUserPhoto; - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = TimeAgoFormatSerialize.class) private Date createTime; private Long likesCount; private Long unLikesCount; + public String getCreateTimeFormat() { + return DateUtil.formatTimeAgo(getCreateTime()); + } + @Override public String toString() { return super.toString(); diff --git a/novel-front/src/main/resources/templates/book/book_detail.html b/novel-front/src/main/resources/templates/book/book_detail.html index c15d5ec..9e2db5a 100644 --- a/novel-front/src/main/resources/templates/book/book_detail.html +++ b/novel-front/src/main/resources/templates/book/book_detail.html @@ -114,7 +114,7 @@ th:text="${comment.location} + '读者'">
  • ([[${comment.unLikesCount}]])