日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/3/12 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java获取前五分钟时间,java计算下一个整5分钟时间点 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

需求背景

我的需求是獲取當(dāng)前時(shí)間之后的下一個(gè)“整5分鐘時(shí)間點(diǎn)”。

首先,那么何為“整5分鐘時(shí)間點(diǎn)”?

滿(mǎ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í)間差可以用來(lái)

設(shè)定 緩存 的過(guò)期時(shí)間

例如 Redis 緩存

設(shè)定 定時(shí)/延遲任務(wù)

例如 ScheduledExecutorService.schedule

例如 Timer.schedule

舉例說(shuō)明

例如給定時(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();

}

}

測(cè)試用例

測(cè)試用例需要用到

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分钟时间点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。