需求背景

我的需求是获取当前时间之后的下一个“整5分钟时间点”。

首先,那么何为“整5分钟时间点”?

满足以下两个条件的时间:

分钟数等于以下时间中的一个,且秒数和毫秒数为 0:

[00, 05, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]

获得的时间大于当前时间

然后,得到了这个“整5分钟时间点” ,我可以求得时间差:

时间差 = “整5分钟时间点” - 当前时间

最后,利用这个时间差可以用来

设定 缓存 的过期时间

例如 Redis 缓存

设定 定时/延迟任务

例如 ScheduledExecutorService.schedule

例如 Timer.schedule

举例说明

例如给定时间为 2020-07-10 13:03:28 得到的“整5分钟时间”为 2020-07-10 13:05:00

实现方法

需要考虑 分钟值 为 55分钟以下 和 55分钟及以上 两种情况,代码如下:

public class TimeHelper {

/**

* 获取下一个分钟值以0或者5结尾的时间点(单位:毫秒)

* @return

*/

public static long getNextMillisEndWithMinute0or5(Date baseTime) {

Calendar calendar = Calendar.getInstance();

calendar.setTime(baseTime);

int minute = calendar.get(Calendar.MINUTE);

if (minute < 55) {

int add = minute%10 < 5? 5 - minute%10 : 10 - minute%10;

calendar.add(Calendar.MINUTE,add);

calendar.set(Calendar.SECOND, 0);

calendar.set(Calendar.MILLISECOND, 0);

return calendar.getTime().getTime();

}

// 当前时间+1小时

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

calendar.set(Calendar.MILLISECOND, 0);

Date endTime = DateUtils.addHours(calendar.getTime(), 1);

return endTime.getTime();

}

}

测试用例

测试用例需要用到

import org.apache.commons.lang.time.DateFormatUtils;

需要考虑到跨小时、跨天、跨(闰)月、跨(闰)年的情况,用例代码如下:

public class TimeHelperTest {

@Test

public void timeEndWithMinute0or5() throws ParseException {

final String format = "yyyy-MM-dd HH:mm:ss";

DateFormat dF = new SimpleDateFormat(format);

long next = TimeHelper.getNextMillisEndWithMinute0or5(new Date());

System.out.println(DateFormatUtils.format(next, format));

long test2 = TimeHelper.getNextMillisEndWithMinute0or5(dF.parse("2020-07-10 11:35:00"));

Assert.assertEquals("2020-07-10 11:40:00", DateFormatUtils.format(test2, "yyyy-MM-dd HH:mm:ss"));

// 跨小时

long test3 = TimeHelper.getNextMillisEndWithMinute0or5(dF.parse("2020-07-10 12:59:59"));

Assert.assertEquals("2020-07-10 13:00:00", DateFormatUtils.format(test3, "yyyy-MM-dd HH:mm:ss"));

// 跨天

long test4 = TimeHelper.getNextMillisEndWithMinute0or5(dF.parse("2020-07-10 23:59:59"));

Assert.assertEquals("2020-07-11 00:00:00", DateFormatUtils.format(test4, "yyyy-MM-dd HH:mm:ss"));

// 跨闰月

long test5 = TimeHelper.getNextMillisEndWithMinute0or5(dF.parse("2020-02-29 23:55:59"));

Assert.assertEquals("2020-03-01 00:00:00", DateFormatUtils.format(test5, "yyyy-MM-dd HH:mm:ss"));

// 跨闰年

long test6 = TimeHelper.getNextMillisEndWithMinute0or5(dF.parse("2019-12-31 23:55:59"));

Assert.assertEquals("2020-01-01 00:00:00", DateFormatUtils.format(test6, "yyyy-MM-dd HH:mm:ss"));

}

}

java 5分钟_java计算下一个整5分钟时间点相关推荐

  1. java获取前五分钟时间,java计算下一个整5分钟时间点

    需求背景 我的需求是获取当前时间之后的下一个"整5分钟时间点". 首先,那么何为"整5分钟时间点"? 满足以下两个条件的时间: 分钟数等于以下时间中的一个,且秒 ...

  2. 如何根据当前时间获取下一个整五分钟

    最近做个项目,有这样一个需求,例如当前时间是11:21,那么我需要获取到11:25这个时间,不知道是我描述有问题,我没有在网上搜到我想要的js代码,所有我就自己手写了一个. <!DOCTYPE ...

  3. java 除法向上,向下取整

    向上取整用:Math.ceil(double a)向下取整用:Math.floor(double a) int a = 7;int b = 5;BigDecimal aBig = new BigDec ...

  4. java 月份间隔_java计算两个日期之间相隔的月份(向下取整)

    最近需求里面有个需要计算两个日期之间相隔的月份,写起来还挺繁琐,需要将各种情况都要考虑到,写了一个作为以后自己的工具吧. //获取哪一天 public static int getDay(Date d ...

  5. java两个时间相差分钟_Java计算两个日期时间相差几天,几小时,几分钟等

    展开全部 思路是先计算两个62616964757a686964616fe59b9ee7ad9431333365666264日期相差的毫秒数,然后分别根据每天的毫秒数.每小时的毫秒数.每分钟的毫秒数来计 ...

  6. java 递归编译_java计算x^n的递归方法?求高手给个算法最佳的 最好能编译通过 本人处于java初学者时期^^...

    java计算x^n的递归方法?求高手给个算法最佳的 最好能编译通过 本人处于java初学者时期^^ 关注:193  答案:4  mip版 解决时间 2021-02-03 20:14 提问者西伯利亚狼 ...

  7. [Leetcode][第116 117题][JAVA][填充每个节点的下一个右侧节点指针][BFS][链表前驱节点]

    [问题描述][中等] [解答思路] 1. BFS层次遍历思想 (通用) 时间复杂度:O(N) 空间复杂度:O(N) public Node connect(Node root) {if (root = ...

  8. [Leetcode][第117题][JAVA][填充每个节点的下一个右侧节点指针][BFS]

    [问题描述][中等] [解答思路] 1. 层次遍历 public Node connect(Node root) {if (root == null)return root;Queue<Node ...

  9. java 间隔分钟_java 计算两个 日期时间 相间隔多少天小时分钟 等

    1.时间转换data默认有toString() 输出格林威治时间,比如说Date date = new Date(); String toStr = date.toString(); 输出的结果类似于 ...

  10. java输入日期计算天数_JAVA计算输入一个日期到当前日期一共多少天

    public class DatePactice { public static void main(String[] args) throws ParseException { Scanner sc ...

最新文章

  1. python爬虫小说代码示例-中文编程,用python编写小说网站爬虫
  2. 创业?你还差一位合格的产品经理
  3. 专栏 | 基于 Jupyter 的特征工程手册:数据预处理(一)
  4. Azkaban与Oozie的区别及如何调度spark任务
  5. 《训练指南》——8.5
  6. iOS之CALayer的CAEmitterLayer实现“红包雨”效果
  7. iOS开发-编译出错 duplicate symbols for architecture x86_64
  8. css实现元素水平垂直居中
  9. web中间件_常见web中间件拿shell
  10. 小心使用IOCP完成端口
  11. Linux操作系统的权限代码分析【转】
  12. 零基础学习.NET平台和Csharp编程开发
  13. 周五,放松心情,听我来分享问题背后的背后(一)
  14. C++中指针优点与线程中指针变量访问
  15. 过年啦!什么是你的春节专属年味儿?
  16. 150行Python代码模拟太阳系行星运转(含music)
  17. 变异检测:vcf文件合并
  18. 【懒人福利】自动记录操作步骤
  19. 写代码实现堆溢出、栈溢出、永久代溢出、直接内存溢出
  20. moses 编译_傻瓜式MOSES安装

热门文章

  1. 鸿蒙系统吹了多少年了还没出,实话实说,在鸿蒙系统上,余承东吹了几次牛都没实现...
  2. linux找不到安装命令,linux命令行为什么输入sudo ./configure提示找不到命令
  3. 为什么使用VO,DTO,BO
  4. python列表的“增删改查”(python基础讲解第四天)
  5. sql优化之b+树锁引实战
  6. APICloud Studio 在海马玩模拟器上调试程序
  7. Vue单页面与多页面的区别
  8. AppBarLayout.Behavior探究
  9. android 平板root,安卓平板电脑怎么root 安卓平板一键root方法
  10. vs 2010旗舰版问题