zoukankan      html  css  js  c++  java
  • 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类中加入该属性,这样在前端取到数据后就可以进行显示了。

    例:

     数据库中的时间:

     

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

     

  • 相关阅读:
    集合模拟斗地主
    泛型
    Iterator迭代器
    嵌入式应用开发过程中用到的函数
    Keil ,source insight使用技巧等
    Socket应用demo 获取IP
    tftp安装、配置,ubuntu联网设置
    C++基础三——类、结构体、联合体
    C++基础二——清华
    STM32笔记
  • 原文地址:https://www.cnblogs.com/devise/p/9974672.html
Copyright © 2011-2022 走看看