java获取前五分钟时间,java计算下一个整5分钟时间点
需求背景
我的需求是獲取當(dāng)前時(shí)間之后的下一個(gè)“整5分鐘時(shí)間點(diǎn)”。
首先,那么何為“整5分鐘時(shí)間點(diǎn)”?
滿足以下兩個(gè)條件的時(shí)間:
分鐘數(shù)等于以下時(shí)間中的一個(gè),且秒數(shù)和毫秒數(shù)為 0:
[00, 05, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]
獲得的時(shí)間大于當(dāng)前時(shí)間
然后,得到了這個(gè)“整5分鐘時(shí)間點(diǎn)” ,我可以求得時(shí)間差:
時(shí)間差 = “整5分鐘時(shí)間點(diǎn)” - 當(dāng)前時(shí)間
最后,利用這個(gè)時(shí)間差可以用來
設(shè)定 緩存 的過期時(shí)間
例如 Redis 緩存
設(shè)定 定時(shí)/延遲任務(wù)
例如 ScheduledExecutorService.schedule
例如 Timer.schedule
舉例說明
例如給定時(shí)間為 2020-07-10 13:03:28 得到的“整5分鐘時(shí)間”為 2020-07-10 13:05:00
實(shí)現(xiàn)方法
需要考慮 分鐘值 為 55分鐘以下 和 55分鐘及以上 兩種情況,代碼如下:
public class TimeHelper {
/**
* 獲取下一個(gè)分鐘值以0或者5結(jié)尾的時(shí)間點(diǎn)(單位:毫秒)
* @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();
}
// 當(dāng)前時(shí)間+1小時(shí)
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;
需要考慮到跨小時(shí)、跨天、跨(閏)月、跨(閏)年的情況,用例代碼如下:
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"));
// 跨小時(shí)
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
總結(jié)
以上是生活随笔為你收集整理的java获取前五分钟时间,java计算下一个整5分钟时间点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flutter web h5微信授权与支
- 下一篇: 最简单的Lambda入门教程