Java 實(shí)現(xiàn)倒計(jì)時功能(由秒計(jì)算天、小時、分鐘、秒)
有時候會要求實(shí)現(xiàn)這樣一個需求:

天、小時、分鐘、秒的數(shù)值都是隔開的,服務(wù)器端只返回一個時間戳長度。
以下就是我的實(shí)現(xiàn)方案,力求減少對象生成、減小計(jì)算量:
import java.util.Timer;
import java.util.TimerTask;
public class CountDownUtils {
private static long day = 0;
private static long hour = 0;
private static long minute = 0;
private static long second = 0;
private static boolean dayNotAlready = false;
private static boolean hourNotAlready = false;
private static boolean minuteNotAlready = false;
private static boolean secondNotAlready = false;
public static void main(String[] args) {
long totalSeconds = 60 * 60 * 24 * 34 + 21;
initData(totalSeconds);
new Timer().schedule(new TimerTask() {
public void run() {
if (secondNotAlready) {
startCount();
} else {
cancel();
}
}
}, 0, 1000);
}
/**
* 初始化賦值
*
* @param totalSeconds
*/
private static void initData(long totalSeconds) {
resetData();
if (totalSeconds > 0) {
secondNotAlready = true;
second = totalSeconds;
if (second >= 60) {
minuteNotAlready = true;
minute = second / 60;
second = second % 60;
if (minute >= 60) {
hourNotAlready = true;
hour = minute / 60;
minute = minute % 60;
if (hour > 24) {
dayNotAlready = true;
day = hour / 24;
hour = hour % 24;
}
}
}
}
System.out.println("初始格式化后——>" + day + "天" + hour + "小時" + minute
+ "分鐘" + second + "秒");
}
private static void resetData() {
day = 0;
hour = 0;
minute = 0;
second = 0;
dayNotAlready = false;
hourNotAlready = false;
minuteNotAlready = false;
secondNotAlready = false;
}
/**
* 計(jì)算各個值的變動
*
*/
public static void startCount() {
if (secondNotAlready) {
if (second > 0) {
second--;
if (second == 0 && !minuteNotAlready) {
secondNotAlready = false;
}
} else {
if (minuteNotAlready) {
if (minute > 0) {
minute--;
second = 59;
if (minute == 0 && !hourNotAlready) {
minuteNotAlready = false;
}
} else {
if (hourNotAlready) {
if (hour > 0) {
hour--;
minute = 59;
second = 59;
if (hour == 0 && !dayNotAlready) {
hourNotAlready = false;
}
} else {
if (dayNotAlready) {
day--;
hour = 23;
minute = 59;
second = 59;
if (day == 0) {
dayNotAlready = false;
}
}
}
}
}
}
}
}
System.out.println("距離截止日期還有——>" + day + "天" + hour + "小時" + minute
+ "分鐘" + second + "秒");
}
}
總結(jié)
以上所述是小編給大家介紹的Java 實(shí)現(xiàn)倒計(jì)時功能(由秒計(jì)算天、小時、分鐘、秒),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Java 獲取當(dāng)前時間及實(shí)現(xiàn)時間倒計(jì)時功能【推薦】
- android使用Rxjava實(shí)現(xiàn)倒計(jì)時功能
- Rxjava實(shí)現(xiàn)發(fā)送驗(yàn)證碼倒計(jì)時功能
- Android 使用 RxJava2 實(shí)現(xiàn)倒計(jì)時功能的示例代碼
- Android使用Kotlin和RxJava 2.×實(shí)現(xiàn)短信驗(yàn)證碼倒計(jì)時效果
- Android 用RxBinding與RxJava2實(shí)現(xiàn)短信驗(yàn)證碼倒計(jì)時功能
- 詳解java倒計(jì)時三種簡單實(shí)現(xiàn)方式
- Java編程倒計(jì)時實(shí)現(xiàn)方法示例
- Java倒計(jì)時三種實(shí)現(xiàn)方式代碼實(shí)例
相關(guān)文章
超詳細(xì)講解Java秒殺項(xiàng)目登陸模塊的實(shí)現(xiàn)
這是一個主要使用java開發(fā)的秒殺系統(tǒng),項(xiàng)目比較大,所以本篇只實(shí)現(xiàn)了登陸模塊,代碼非常詳盡,感興趣的朋友快來看看2022-03-03
java實(shí)現(xiàn)HmacSHA256算法進(jìn)行加密方式
這篇文章主要介紹了java實(shí)現(xiàn)HmacSHA256算法進(jìn)行加密方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
使用ServletInputStream()輸入流讀取圖片方式
這篇文章主要介紹了使用ServletInputStream()輸入流讀取圖片方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
java數(shù)據(jù)庫批量插入數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了java數(shù)據(jù)庫批量插入數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
SpringBoot Validation入?yún)⑿r?yàn)國際化的項(xiàng)目實(shí)踐
在Spring Boot中,可以使用Validation和國際化來實(shí)現(xiàn)對入?yún)⒌男r?yàn),本文就來介紹一下SpringBoot Validation入?yún)⑿r?yàn)國際化,具有一定的參考價值,感興趣的可以了解一下2023-10-10
spring注解識別一個接口的多個實(shí)現(xiàn)類方法
下面小編就為大家?guī)硪黄猻pring注解識別一個接口的多個實(shí)現(xiàn)類方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
Java如何設(shè)置系統(tǒng)參數(shù)和運(yùn)行參數(shù)
這篇文章主要介紹了Java如何設(shè)置系統(tǒng)參數(shù)和運(yùn)行參數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
spring-boot react如何一步一步實(shí)現(xiàn)增刪改查
這篇文章主要介紹了spring-boot react如何一步一步實(shí)現(xiàn)增刪改查,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11

