java 5分钟_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"));
}
}
java 5分钟_java计算下一个整5分钟时间点相关推荐
- java获取前五分钟时间,java计算下一个整5分钟时间点
需求背景 我的需求是获取当前时间之后的下一个"整5分钟时间点". 首先,那么何为"整5分钟时间点"? 满足以下两个条件的时间: 分钟数等于以下时间中的一个,且秒 ...
- 如何根据当前时间获取下一个整五分钟
最近做个项目,有这样一个需求,例如当前时间是11:21,那么我需要获取到11:25这个时间,不知道是我描述有问题,我没有在网上搜到我想要的js代码,所有我就自己手写了一个. <!DOCTYPE ...
- java 除法向上,向下取整
向上取整用:Math.ceil(double a)向下取整用:Math.floor(double a) int a = 7;int b = 5;BigDecimal aBig = new BigDec ...
- java 月份间隔_java计算两个日期之间相隔的月份(向下取整)
最近需求里面有个需要计算两个日期之间相隔的月份,写起来还挺繁琐,需要将各种情况都要考虑到,写了一个作为以后自己的工具吧. //获取哪一天 public static int getDay(Date d ...
- java两个时间相差分钟_Java计算两个日期时间相差几天,几小时,几分钟等
展开全部 思路是先计算两个62616964757a686964616fe59b9ee7ad9431333365666264日期相差的毫秒数,然后分别根据每天的毫秒数.每小时的毫秒数.每分钟的毫秒数来计 ...
- java 递归编译_java计算x^n的递归方法?求高手给个算法最佳的 最好能编译通过 本人处于java初学者时期^^...
java计算x^n的递归方法?求高手给个算法最佳的 最好能编译通过 本人处于java初学者时期^^ 关注:193 答案:4 mip版 解决时间 2021-02-03 20:14 提问者西伯利亚狼 ...
- [Leetcode][第116 117题][JAVA][填充每个节点的下一个右侧节点指针][BFS][链表前驱节点]
[问题描述][中等] [解答思路] 1. BFS层次遍历思想 (通用) 时间复杂度:O(N) 空间复杂度:O(N) public Node connect(Node root) {if (root = ...
- [Leetcode][第117题][JAVA][填充每个节点的下一个右侧节点指针][BFS]
[问题描述][中等] [解答思路] 1. 层次遍历 public Node connect(Node root) {if (root == null)return root;Queue<Node ...
- java 间隔分钟_java 计算两个 日期时间 相间隔多少天小时分钟 等
1.时间转换data默认有toString() 输出格林威治时间,比如说Date date = new Date(); String toStr = date.toString(); 输出的结果类似于 ...
- java输入日期计算天数_JAVA计算输入一个日期到当前日期一共多少天
public class DatePactice { public static void main(String[] args) throws ParseException { Scanner sc ...
最新文章
- python爬虫小说代码示例-中文编程,用python编写小说网站爬虫
- 创业?你还差一位合格的产品经理
- 专栏 | 基于 Jupyter 的特征工程手册:数据预处理(一)
- Azkaban与Oozie的区别及如何调度spark任务
- 《训练指南》——8.5
- iOS之CALayer的CAEmitterLayer实现“红包雨”效果
- iOS开发-编译出错 duplicate symbols for architecture x86_64
- css实现元素水平垂直居中
- web中间件_常见web中间件拿shell
- 小心使用IOCP完成端口
- Linux操作系统的权限代码分析【转】
- 零基础学习.NET平台和Csharp编程开发
- 周五,放松心情,听我来分享问题背后的背后(一)
- C++中指针优点与线程中指针变量访问
- 过年啦!什么是你的春节专属年味儿?
- 150行Python代码模拟太阳系行星运转(含music)
- 变异检测:vcf文件合并
- 【懒人福利】自动记录操作步骤
- 写代码实现堆溢出、栈溢出、永久代溢出、直接内存溢出
- moses 编译_傻瓜式MOSES安装
热门文章
- 鸿蒙系统吹了多少年了还没出,实话实说,在鸿蒙系统上,余承东吹了几次牛都没实现...
- linux找不到安装命令,linux命令行为什么输入sudo ./configure提示找不到命令
- 为什么使用VO,DTO,BO
- python列表的“增删改查”(python基础讲解第四天)
- sql优化之b+树锁引实战
- APICloud Studio 在海马玩模拟器上调试程序
- Vue单页面与多页面的区别
- AppBarLayout.Behavior探究
- android 平板root,安卓平板电脑怎么root 安卓平板一键root方法
- vs 2010旗舰版问题