需求背景

我的需求是获取当前时间之后的下一个“整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"));

}

}

原文:https://www.cnblogs.com/kendoziyu/p/13278693.html

java获取前五分钟时间,java计算下一个整5分钟时间点相关推荐

  1. java获取前五分钟时间_使用日期操作类(Calendar)获得几秒、几分钟、几小时之前的时间...

    public String dealDate(String case_time){ // 日期操作类 Calendar calendar = Calendar.getInstance(); // 当前 ...

  2. java获取一年的周数、单周开始时间与结束时间、一年所有周开始时间与结束时间、月开始时间与结束时间

    java获取一年的周数.单周开始时间与结束时间.一年所有周开始时间与结束时间.月开始时间与结束时间 package com.frgk.produce.util;import org.springfra ...

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

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

  4. java成绩前五名的代码_java 如何选出成绩排前5名的学生呢

    java 如何选出成绩排前5名的学生呢 关注:57  答案:2  mip版 解决时间 2021-02-05 07:34 提问者夜落花台 2021-02-04 12:53 录入班级学生 输出成绩排前5名 ...

  5. java练习题---前五章

    1.解析:new AB(a,5),很明显括号中有数据,调用的是带参构造函数new AB(char x1,int x2); 2. 解析: NumberFormatException 数字格式转换异常.非 ...

  6. java获取电脑配置_使用Java获取cao作系统和硬件信息

    距离上一次写博客已经过去2个半的月份了,也是工作忙,也是懒,也是在积攒文章吧,反正就是许久没有写了,本次分享一个用Java获取cao作系统和硬件信息的组件,在十一假期之前就准备分享的,然这些详细的参数 ...

  7. java 获取注释_Java面试题Java语言有哪些注释的方式?

    点击上方"千锋Java学院",选择"置顶公众号" 每天一道面试模拟真题及解析 课前导读 ●回复"每日一练"获取以前的题目,持续更新! ●我希 ...

  8. java获取随机数方法_《Java语言程序设计》Java获取随机数方法

    <Java语言程序设计>Java获取随机数方法 在Java中我们可以使用java.util.Random类来产生一个随机数发生器.它有两种形式的构造函数,分别是Random()和Rando ...

  9. java获取flex数据_Flex与java交互之数据库数据读取

    [转载:版权归原创所有http://hi.baidu.com/giver/blog/item/de128602ba9ccd074afb517a.html] 前几天有网友要我写一篇关于flex与数据库交 ...

最新文章

  1. ADF12C 在线预览PDF文件 afinlineFrame
  2. 用c语言编一个贪吃蛇,刚学C语言,想写一个贪吃蛇的代码
  3. 科研文献|粪便污染可以解释人为影响环境中抗生素耐药基因丰度
  4. 动静结合学内核:linux idle进程和init进程浅析
  5. DzzOffice1.0 Beta2发布
  6. CTFshow 命令执行 web68
  7. 201771010119穷吉第八周
  8. 标准C++类std::string的内存共享和Copy-On-Write(写时拷贝)
  9. hadoop可以解决什么问题_快速解决皮带机轴磨损问题可以这样做
  10. 数据有偏差,照样能学对!20年前就有这么强的算法了?
  11. python与javascript的区别_python与js区别有哪些
  12. Android Audio打开输出设备流程(十五)
  13. KVM/QEMU桥接网络设置[zz]
  14. OpenCV-Python教程:阈值化(threshold,adaptiveThreshold)
  15. 年长车友的单车游记:骑单车游崇明岛(转)
  16. 数据治理系列8:数据价值管理
  17. DHTMLXGantt in Flutter DHTMLXGantt
  18. 工作记录 01-02-2018 至 03-16-2018
  19. Android 10 和Android 11 适配采坑 实践篇
  20. html 弹出固定大小的页面,html弹出固定大小的窗口(HTML pops up a fixed size window).doc...

热门文章

  1. Usb 声卡 linux,树莓派:使用usb声卡播放音乐
  2. B - The Pilots Brothers' refrigerator
  3. GIS开发之二维地下管线综合管理系统(Arcgis)第三节 使用python和modelbuilder
  4. R语言 自定义区间频数频率表
  5. 可视化工具不知道怎么选?深度评测5大Python数据可视化工具
  6. 剑灵盛世服务器位置,剑灵全新大区西洛区 1月17日盛世开启!
  7. 智慧高速公路车路协同系统框架及要求第二部分
  8. Unrecognized option: --add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
  9. 服务器证书签发的ip地址选项,公网IP申请SSL证书 DV1-5分钟快速签发IP文件认证
  10. 爬取网易云音乐排行榜