遇到一个需求,计算出作者文章发送时间间隔显示在用户端,写了一个简易的区间获取工具,如下:

/*** 获取发送时间间隔** @param pastDateTime* @return java.util.Map<java.lang.Long, com.hclc.stq.util.date.DateUtil.ThresholdDateEnum>* @author yurj* @version 1.0* @date 2020/9/24 11:04*/public static ThresholdDateDvo getSendTimeInterval(LocalDateTime pastDateTime) {// 现在时间long nowTime = getTimestampByLocalDateTime(LocalDateTime.now());// 过去时间long pastTime = getTimestampByLocalDateTime(pastDateTime);long differenceTime = (nowTime - pastTime) / 1000;// 秒钟阈值(59秒)long SECONDS_THRESHOLD = ChronoUnit.MINUTES.getDuration().getSeconds() - 1;// 分钟阈值(59分59秒)long MINUTES_THRESHOLD = ChronoUnit.HOURS.getDuration().getSeconds() - 1;// 小时阈值(23时59分59秒)long HOURS_THRESHOLD = ChronoUnit.DAYS.getDuration().getSeconds() - 1;// 天阈值(6天23时59分59秒)long DAYS_THRESHOLD = ChronoUnit.WEEKS.getDuration().getSeconds() - 1;// 周阈值(30天10时29分5秒 注:java一月为30.43天,一年是365.24天)long WEEKS_THRESHOLD = ChronoUnit.MONTHS.getDuration().getSeconds() - 1;// 月阈值(12月0天5时49分12秒)long MONTH_THRESHOLD = ChronoUnit.YEARS.getDuration().getSeconds() - 1;List<Long> thresholdList = new ArrayList<>();Map<Long, ThresholdDateEnum> thresholdMap = new HashMap<>();thresholdList.add(SECONDS_THRESHOLD);thresholdMap.put(SECONDS_THRESHOLD, ThresholdDateEnum.SECONDS);thresholdList.add(MINUTES_THRESHOLD);thresholdMap.put(MINUTES_THRESHOLD, ThresholdDateEnum.MINUTES);thresholdList.add(HOURS_THRESHOLD);thresholdMap.put(HOURS_THRESHOLD, ThresholdDateEnum.HOURS);thresholdList.add(DAYS_THRESHOLD);thresholdMap.put(DAYS_THRESHOLD, ThresholdDateEnum.DAYS);thresholdList.add(WEEKS_THRESHOLD);thresholdMap.put(WEEKS_THRESHOLD, ThresholdDateEnum.WEEKS);thresholdList.add(MONTH_THRESHOLD);thresholdMap.put(MONTH_THRESHOLD, ThresholdDateEnum.MONTHS);// 初始化返回值ThresholdDateDvo thresholdDateDvo = new ThresholdDateDvo();thresholdDateDvo.setDateUnitNumber(0L);thresholdDateDvo.setThresholdDateEnum(ThresholdDateEnum.SECONDS);// 上次阈值时间long lastTime = 0L;for (int i = 0; i < thresholdList.size(); i++) {long currentNode = thresholdList.get(i);// 判断区间if (differenceTime > lastTime && differenceTime < currentNode) {if (lastTime == 0) {thresholdDateDvo.setDateUnitNumber(differenceTime);break;}long dateUnitNum = differenceTime / lastTime;thresholdDateDvo.setDateUnitNumber(dateUnitNum);ThresholdDateEnum unitEnum = thresholdMap.get(currentNode);thresholdDateDvo.setThresholdDateEnum(unitEnum);break;}lastTime = currentNode;}return thresholdDateDvo;}
/*** 时间阈值枚举*/public enum ThresholdDateEnum {SECONDS(ChronoUnit.SECONDS, "秒"),MINUTES(ChronoUnit.MINUTES, "分钟"),HOURS(ChronoUnit.HOURS, "小时"),DAYS(ChronoUnit.DAYS, "天"),WEEKS(ChronoUnit.WEEKS, "周"),MONTHS(ChronoUnit.MONTHS, "月"),YEARS(ChronoUnit.YEARS, "年");@JsonValueprivate ChronoUnit code;private String desc;ThresholdDateEnum(ChronoUnit code, String desc) {this.code = code;this.desc = desc;}public String getDesc() {return desc;}}
@Datapublic static class ThresholdDateDvo {/*** 时间单位数量*/private Long dateUnitNumber;/*** 时间单位*/private ThresholdDateEnum thresholdDateEnum;}

实例:

public static void main(String[] args) {LocalDateTime time = LocalDateTime.of(LocalDate.of(2020, 9, 24), LocalTime.now().minusHours(11));System.out.println(time);ThresholdDateDvo sendTimeInterval = getSendTimeInterval(time);System.out.println(sendTimeInterval);System.out.println(sendTimeInterval.getDateUnitNumber() + sendTimeInterval.getThresholdDateEnum().desc);}

效果:

java获取发送时间间隔工具类,1秒前,1分钟前,1小时前...相关推荐

  1. java获取真实ip工具类

    场景 有的时候我们需要获取客户端的真实ip,用来实现ip白名单,和黑名单的配置! ip工具类如下 package com.meeno.framework.utils;import javax.serv ...

  2. java外部接口图解_java代码实现访问网络外部接口并获取数据的工具类详解

    java代码实现访问网络外部接口并获取数据的工具类 工具类代码,可以直接copy使用 package com.yqzj.util; import org.apache.log4j.LogManager ...

  3. Java调用linux指令工具类,直接执行cmd,执行grep指令返回结果,执行sed追加指令,hdfs下载指令,获取文件行数

    Java调用linux指令工具类,直接执行cmd,执行grep指令返回结果,执行sed追加指令,hdfs下载指令,获取文件行数 问题背景 LinuxUtils工具类 Lyric:梦想挟带眼泪 问题背景 ...

  4. java redis remove_最全的Java操作Redis的工具类

    RedisUtil 当前版本:1.1 增加更全的方法,对以前的部分方法进行了规范命名,请放心替换成新版本. 介绍 最全的Java操作Redis的工具类,使用StringRedisTemplate实现, ...

  5. 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)

    文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...

  6. java项目常用的工具类

    前言 在开发过程中,我们会遇到很多繁琐或者棘手的问题,但是,这些问题往往会存在一些便捷的工具类,来简化我们的开发,下面是我工作中经常使用到的工具类 常用工具类 日期工具类 import java.te ...

  7. Java 线程 - 基础及工具类 (二)

    Java 并发系列文章 Java 线程 - 并发理论基础(一) Java 线程 - 基础及工具类 (二) Java 线程 - 并发设计模式 (三) Java 线程(二) 通用的线程生命周期 Java ...

  8. java联调生成测试数据工具类

    java联调生成测试数据工具类 一.背景 二.代码 一.背景 在日常的联调中,我们经常需要准备一定数量的测试数据,用来配合前端测试.当然对于简单的数据类型完全可以通过 JDK 自带的 Random 类 ...

  9. java 代理ip工具类_Java基础之java处理ip的工具类

    java处理ip的工具类,包括把long类型的Ip转为一般Ip类型.把xx.xx.xx.xx类型的转为long类型.根据掩码位获取掩码.根据 ip/掩码位 计算IP段的起始IP.根据 ip/掩码位 计 ...

最新文章

  1. 深入浅出ThreadLocal,你会吗?
  2. Ubuntu~Tensorflow~GPU
  3. ACE .i .inl文件(转)
  4. 四种方案解决ScrollView嵌套ListView问题
  5. 2018 German Collegiate Programming Contest (GCPC 18)
  6. 机器学习数据倾斜的解决方法_机器学习并不总是解决数据问题的方法
  7. 叮咚!你有一份来自明源云的圣诞邀约
  8. XSS(跨站脚本攻击)攻击与防御
  9. c++测试cpu_测评丨NXP系列 LS1028 LS1046等产品网络性能测试
  10. vs2005 pro 在浏览器查看下的一个问题!
  11. 电脑系统如何锁定计算机,如何删除“解除计算机锁定”页面?
  12. 人到中年生活不易,特别是工作压力很大
  13. 【数论】快速幂:实现pow(double ,int)
  14. java 启动参数 配置_Java运行参数设置
  15. Sql Prompt使用技巧
  16. 测试额外任务而撒旦法 速度速度发撒旦法
  17. 什么是SysWow64
  18. 一文看懂Android APK安装的原理
  19. GridView使用【GridViewHelper】分组统计
  20. pytest接口自动化测试框架 | 用python代码测试接口

热门文章

  1. python通过ip获取地理位置等ip信息
  2. excel怎么设置打印区域_Excel如何设置打印区域及打印区域如何调整
  3. Linux主机安全配置
  4. 入驻华为云·云享专家了~
  5. 直销系统开发|直销双轨制模式详解
  6. Python计算商品复购率
  7. 最小公共子串——力扣
  8. transforms.ToTensor()与transforms.Normalize()函数解析
  9. 【华人学者风采】麦立强 武汉理工大学
  10. 谭浩强《C程序分析》(第五版)第七章