• java后端时间处理工具类,返回 "XXX 前" 的字符串


    我们经常会遇到显示 "某个之间之前" 的需求(比如各种社交软件,在回复消息时,显示xxx之前回复),我们可以在后端进行处理,也可以在前端进行处理,这里讲讲在后端进行处理的方法.

    其实很简单,我们只需要将从数据库中取到的date类型的字段进行处理。

    工具类如下:

     

     

    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * 日期工具类
     * 传入一个 2018-06-01 18:35:35 格式的日期对象,通过TimeAgoUtils.format方法,多少秒前、多少天前的字符串
     * 
     *
     */
    public class TimeAgoUtils {
    
       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_AGO = "秒前";
       private static final String ONE_MINUTE_AGO = "分钟前";
       private static final String ONE_HOUR_AGO = "小时前";
       private static final String ONE_DAY_AGO = "天前";
       private static final String ONE_MONTH_AGO = "月前";
       private static final String ONE_YEAR_AGO = "年前";
    
       public static String format(Date date) {
          long delta = new Date().getTime() - date.getTime();
          if (delta < 1L * ONE_MINUTE) {
             long seconds = toSeconds(delta);
             return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_AGO;
          }
          if (delta < 45L * ONE_MINUTE) {
             long minutes = toMinutes(delta);
             return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO;
          }
          if (delta < 24L * ONE_HOUR) {
             long hours = toHours(delta);
             return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO;
          }
          if (delta < 48L * ONE_HOUR) {
             return "昨天";
          }
          if (delta < 30L * ONE_DAY) {
             long days = toDays(delta);
             return (days <= 0 ? 1 : days) + ONE_DAY_AGO;
          }
          if (delta < 12L * 4L * ONE_WEEK) {
             long months = toMonths(delta);
             return (months <= 0 ? 1 : months) + ONE_MONTH_AGO;
          } else {
             long years = toYears(delta);
             return (years <= 0 ? 1 : years) + ONE_YEAR_AGO;
          }
       }
    
       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 Exception {
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
          Date date = sdf.parse("2018-06-01 18:35:35");
          
          System.out.println(TimeAgoUtils.format(date));
          
          
       }
    
    }

    经过了该类的处理之后,得到的全是 "xxx前"  的字符串。我们可以将需要返回到前端的VO类中加入该属性,这样在前端取到数据后就可以进行显示了。

    例:

     数据库中的时间:

     

    经过工具类进行处理后,在前端显示的格式:

     

  • 相关阅读:
    Xcode 单元测试
    Oracle积累
    懒人小技巧, Toad 常用偷懒方法
    改变UITableView选中行高亮的颜色
    苹果企业版帐号申请记录
    RGB颜色设置错误
    IOS 设置文件是否使用ARC
    懒人的小技巧, 批处理修改IP
    Go连接MYSQL
    Go中的函数和闭包
  • 原文地址:https://www.cnblogs.com/devise/p/9974672.html
Copyright © 2020-2023  润新知