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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 5分钟_java计算下一个整5分钟时间点

發布時間:2023/12/20 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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分钟时间点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。