java获取前五分钟时间,java计算下一个整5分钟时间点
需求背景
我的需求是获取当前时间之后的下一个“整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分钟时间点相关推荐
- java获取前五分钟时间_使用日期操作类(Calendar)获得几秒、几分钟、几小时之前的时间...
public String dealDate(String case_time){ // 日期操作类 Calendar calendar = Calendar.getInstance(); // 当前 ...
- java获取一年的周数、单周开始时间与结束时间、一年所有周开始时间与结束时间、月开始时间与结束时间
java获取一年的周数.单周开始时间与结束时间.一年所有周开始时间与结束时间.月开始时间与结束时间 package com.frgk.produce.util;import org.springfra ...
- 如何根据当前时间获取下一个整五分钟
最近做个项目,有这样一个需求,例如当前时间是11:21,那么我需要获取到11:25这个时间,不知道是我描述有问题,我没有在网上搜到我想要的js代码,所有我就自己手写了一个. <!DOCTYPE ...
- java成绩前五名的代码_java 如何选出成绩排前5名的学生呢
java 如何选出成绩排前5名的学生呢 关注:57 答案:2 mip版 解决时间 2021-02-05 07:34 提问者夜落花台 2021-02-04 12:53 录入班级学生 输出成绩排前5名 ...
- java练习题---前五章
1.解析:new AB(a,5),很明显括号中有数据,调用的是带参构造函数new AB(char x1,int x2); 2. 解析: NumberFormatException 数字格式转换异常.非 ...
- java获取电脑配置_使用Java获取cao作系统和硬件信息
距离上一次写博客已经过去2个半的月份了,也是工作忙,也是懒,也是在积攒文章吧,反正就是许久没有写了,本次分享一个用Java获取cao作系统和硬件信息的组件,在十一假期之前就准备分享的,然这些详细的参数 ...
- java 获取注释_Java面试题Java语言有哪些注释的方式?
点击上方"千锋Java学院",选择"置顶公众号" 每天一道面试模拟真题及解析 课前导读 ●回复"每日一练"获取以前的题目,持续更新! ●我希 ...
- java获取随机数方法_《Java语言程序设计》Java获取随机数方法
<Java语言程序设计>Java获取随机数方法 在Java中我们可以使用java.util.Random类来产生一个随机数发生器.它有两种形式的构造函数,分别是Random()和Rando ...
- java获取flex数据_Flex与java交互之数据库数据读取
[转载:版权归原创所有http://hi.baidu.com/giver/blog/item/de128602ba9ccd074afb517a.html] 前几天有网友要我写一篇关于flex与数据库交 ...
最新文章
- ADF12C 在线预览PDF文件 afinlineFrame
- 用c语言编一个贪吃蛇,刚学C语言,想写一个贪吃蛇的代码
- 科研文献|粪便污染可以解释人为影响环境中抗生素耐药基因丰度
- 动静结合学内核:linux idle进程和init进程浅析
- DzzOffice1.0 Beta2发布
- CTFshow 命令执行 web68
- 201771010119穷吉第八周
- 标准C++类std::string的内存共享和Copy-On-Write(写时拷贝)
- hadoop可以解决什么问题_快速解决皮带机轴磨损问题可以这样做
- 数据有偏差,照样能学对!20年前就有这么强的算法了?
- python与javascript的区别_python与js区别有哪些
- Android Audio打开输出设备流程(十五)
- KVM/QEMU桥接网络设置[zz]
- OpenCV-Python教程:阈值化(threshold,adaptiveThreshold)
- 年长车友的单车游记:骑单车游崇明岛(转)
- 数据治理系列8:数据价值管理
- DHTMLXGantt in Flutter DHTMLXGantt
- 工作记录 01-02-2018 至 03-16-2018
- Android 10 和Android 11 适配采坑 实践篇
- html 弹出固定大小的页面,html弹出固定大小的窗口(HTML pops up a fixed size window).doc...
热门文章
- Usb 声卡 linux,树莓派:使用usb声卡播放音乐
- B - The Pilots Brothers' refrigerator
- GIS开发之二维地下管线综合管理系统(Arcgis)第三节 使用python和modelbuilder
- R语言 自定义区间频数频率表
- 可视化工具不知道怎么选?深度评测5大Python数据可视化工具
- 剑灵盛世服务器位置,剑灵全新大区西洛区 1月17日盛世开启!
- 智慧高速公路车路协同系统框架及要求第二部分
- Unrecognized option: --add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
- 服务器证书签发的ip地址选项,公网IP申请SSL证书 DV1-5分钟快速签发IP文件认证
- 爬取网易云音乐排行榜