java查某个时间在几分钟前、几小时前、几天前、几月前、一年前

硅谷探秘者 算法基础 953 0 0

java工具类

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        System.out.println(format(LocalDateTime.now().minusDays(1)));
        System.out.println(format(LocalDateTime.now().minusSeconds(2)));
        System.out.println(format(LocalDateTime.now().minusWeeks(5)));
    }

    private static final long ONE_MILLISECOND = 1000L;
    private static final long ONE_MINUTE = 60000L;
    private static final long ONE_HOUR = 3600000L;
    private static final long ONE_DAY = 86400000L;

    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 = "1个月前";
    private static final String TWO_MONTH_AGO = "2个月前";
    private static final String THREE_MONTH_AGO = "3个月前";
    private static final String FOUR_MONTH_AGO = "4个月前";
    private static final String FIVE_MONTH_AGO = "5个月前";
    private static final String SIX_MONTH_AGO = "6个月前";
    private static final String SEVEN_MONTH_AGO = "7个月前";
    private static final String EIGHT_MONTH_AGO = "8个月前";
    private static final String NINE_MONTH_AGO = "9个月前";
    private static final String TEN_MONTH_AGO = "10个月前";
    private static final String ELEVEN_MONTH_AGO = "11个月前";
    private static final String ONE_YEAR_AGO = "一年前";



    public static String format(LocalDateTime date) {
        return format(localDateTimeToDate(date));
    }

    public static String format(Date date) {

        Calendar calendar = Calendar.getInstance();
        long now = calendar.getTimeInMillis();
        long delta = now - date.getTime();

        // 逻辑判断
        if (delta < ONE_MINUTE){  return delta/ONE_MILLISECOND + ONE_SECOND_AGO;}
        if (delta < ONE_HOUR){  return delta/ONE_MINUTE + ONE_MINUTE_AGO;}
        if (delta < ONE_DAY){  return delta/ONE_HOUR + ONE_HOUR_AGO;}
        if (delta < getTime(calendar, now)){ return delta/ONE_DAY + ONE_DAY_AGO;}
        if (delta < getTime(calendar, now)){ return ONE_MONTH_AGO;}
        if (delta < getTime(calendar, now)){ return TWO_MONTH_AGO;}
        if (delta < getTime(calendar, now)){ return THREE_MONTH_AGO;}
        if (delta < getTime(calendar, now)){ return FOUR_MONTH_AGO;}
        if (delta < getTime(calendar, now)){ return FIVE_MONTH_AGO;}
        if (delta < getTime(calendar, now)){ return SIX_MONTH_AGO;}
        if (delta < getTime(calendar, now)){ return SEVEN_MONTH_AGO;}
        if (delta < getTime(calendar, now)){ return EIGHT_MONTH_AGO;}
        if (delta < getTime(calendar, now)){ return NINE_MONTH_AGO;}
        if (delta < getTime(calendar, now)){ return TEN_MONTH_AGO;}
        if (delta < getTime(calendar, now)){ return ELEVEN_MONTH_AGO;}
        return ONE_YEAR_AGO;
    }

    private static long getTime(Calendar calendar, long now) {
        calendar.add(Calendar.MONTH, -1);
        return now - calendar.getTimeInMillis();
    }


    /**
     * LocalDateTime 转 Date
     * @param localDateTime
     * @return
     */
    public static Date localDateTimeToDate(LocalDateTime localDateTime){
        ZoneId zoneId = ZoneId.systemDefault();
        ZonedDateTime zdt = localDateTime.atZone(zoneId);
        return Date.from(zdt.toInstant());
    }

    /**
     * Date 转 LocalDateTime
     * @param date
     * @return
     */
    public static LocalDateTime dateToLocalDateTime(Date date){
        LocalDateTime localDateTime = date.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
        return localDateTime;
    }
}

评论区
请写下您的评论...
暂无评论...
猜你喜欢
前端(h5) 3619 js获取的今的日期/***获取上**@date格式为yyyy-mm-dd的日期,如:2014-01-25*/functiongetPreMonth(date){vararr
数据库基础 2703 mysql的基础上加n()等SELECTDATE_FORMAT(ADDDATE(now(),INTERVAL20MINUTE),'%Y-%m-%d%H:%i:%s')#加20
official 1031 ://github.com/18438301593/NettyWebsocketProtoDemo主要过程析:、.proto文件编写,生成java类,以及javacript文件。  参考文章:  http://www.j
nginx,前端,java基础 1304 ://github.com/18438301593/NettyWebsocketProtoDemo主要过程析:、.proto文件编写,生成java类,以及javacript文件。  参考文章:  http://www.j
前端(h5) 1469 引入layui相关组件layui.use(['form','laypage'],function(){ var$=layui.$; varlaypage=layui.laypage; varform=layui.form; functionsel(message,page,limit){ $.ajax({ url:'${path}/interview/select',
算法基础 1088 privateStringcamel4underline(Stringparam){ Patternp=Pattern.compile("[A-Z]"); if(param==null||param.equals("")){ return""; } StringBuilderbuilder=newStringBuilder(param); Matchermc=p.matcher(param); i
official 827 leetcode第589题题目描述给定N叉树,返回其节点值的序遍历。例如,给定3叉树:返回其序遍历:[1,3,5,6,2,4]。解题思路递归遍历,深度优先搜索代码(java
数据结构与算法 3494 里得定理求最大公约数往往计算比例的候使用用到了递归packageday17;publicclass欧里得定理{publicstaticvoidmain(String[]args
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。