最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)固定時(shí)段倒計(jì)時(shí)的示例代碼

 更新時(shí)間:2025年08月19日 08:40:53   作者:愛碼少年?00fly.online  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)固定時(shí)段倒計(jì)時(shí),可以在每隔一定時(shí)間給出時(shí)間倒計(jì)時(shí)提示,文中的示例代碼講解詳細(xì),需要的可以了解下

一、簡(jiǎn)單需求

某系統(tǒng)需要每隔一定時(shí)間給出時(shí)間倒計(jì)時(shí)提示,時(shí)間倒計(jì)時(shí)可能為每1、2、3、4、6、8、12或24小時(shí),提示格式為HH:mm:ss

二、代碼實(shí)現(xiàn)

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.time.DateFormatUtils;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Hours
{
    private static ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
    
    private static int[] hours = {1, 2, 3, 4, 6, 8, 12, 24};
    
    /**
     * 整點(diǎn)倒計(jì)時(shí)
     * 
     * @param args
     * @see [類、類#方法、類#成員]
     */
    public static void main(String[] args)
    {
        // 3ms微調(diào)值
        long initDelay = 10000L - System.currentTimeMillis() % 10000L - 3;
        int hour = hours[RandomUtils.nextInt(0, hours.length)];
        executorService.scheduleAtFixedRate(() -> printTime(hour), initDelay, 10000, TimeUnit.MILLISECONDS);
    }
    
    private static void printTime(int hour)
    {
        // 定義時(shí)間間隔
        Long between = hour * 3600000L;
        long time = between - (System.currentTimeMillis() + 8 * 3600000L) % between;
        
        //去除100ms之內(nèi)誤差
        time += (100 - time % 100); 
        String after = DateFormatUtils.formatUTC(time, "HH':'mm':'ss.SSS");
        log.info("---------------  {} ==> {} H -------------------", after, hour);
    }
}

三、運(yùn)行結(jié)果

2025-07-16 08:20:00.005 [pool-2-thread-2] INFO  c.f.s.Hours                    - ---------------  00:40:00.000 ==> 3 H -------------------
2025-07-16 08:20:10.001 [pool-2-thread-1] INFO  c.f.s.Hours                    - ---------------  00:39:50.000 ==> 3 H -------------------
2025-07-16 08:20:20.002 [pool-2-thread-2] INFO  c.f.s.Hours                    - ---------------  00:39:40.000 ==> 3 H -------------------
2025-07-16 08:20:30.002 [pool-2-thread-1] INFO  c.f.s.Hours                    - ---------------  00:39:30.000 ==> 3 H -------------------
2025-07-16 08:20:40.002 [pool-2-thread-2] INFO  c.f.s.Hours                    - ---------------  00:39:20.000 ==> 3 H -------------------
2025-07-16 08:20:50.002 [pool-2-thread-2] INFO  c.f.s.Hours                    - ---------------  00:39:10.000 ==> 3 H -------------------
2025-07-16 08:21:00.006 [pool-2-thread-2] INFO  c.f.s.Hours                    - ---------------  00:39:00.000 ==> 3 H -------------------
2025-07-16 08:21:10.002 [pool-2-thread-1] INFO  c.f.s.Hours                    - ---------------  00:38:50.000 ==> 3 H -------------------
2025-07-16 08:21:20.002 [pool-2-thread-2] INFO  c.f.s.Hours                    - ---------------  00:38:40.000 ==> 3 H -------------------
2025-07-16 08:21:30.002 [pool-2-thread-1] INFO  c.f.s.Hours                    - ---------------  00:38:30.000 ==> 3 H -------------------
2025-07-16 08:21:40.002 [pool-2-thread-1] INFO  c.f.s.Hours                    - ---------------  00:38:20.000 ==> 3 H -------------------
2025-07-16 08:21:50.002 [pool-2-thread-2] INFO  c.f.s.Hours                    - ---------------  00:38:10.000 ==> 3 H -------------------
2025-07-16 08:22:00.005 [pool-2-thread-1] INFO  c.f.s.Hours                    - ---------------  00:38:00.000 ==> 3 H -------------------
2025-07-16 08:22:10.002 [pool-2-thread-2] INFO  c.f.s.Hours                    - ---------------  00:37:50.000 ==> 3 H -------------------
2025-07-16 08:22:20.002 [pool-2-thread-2] INFO  c.f.s.Hours                    - ---------------  00:37:40.000 ==> 3 H -------------------
2025-07-16 08:22:30.002 [pool-2-thread-1] INFO  c.f.s.Hours                    - ---------------  00:37:30.000 ==> 3 H -------------------
2025-07-16 08:22:40.002 [pool-2-thread-2] INFO  c.f.s.Hours                    - ---------------  00:37:20.000 ==> 3 H -------------------
2025-07-16 08:22:50.002 [pool-2-thread-1] INFO  c.f.s.Hours                    - ---------------  00:37:10.000 ==> 3 H -------------------
2025-07-16 08:23:00.005 [pool-2-thread-2] INFO  c.f.s.Hours                    - ---------------  00:37:00.000 ==> 3 H -------------------
2025-07-16 08:23:10.002 [pool-2-thread-1] INFO  c.f.s.Hours                    - ---------------  00:36:50.000 ==> 3 H -------------------

四、知識(shí)擴(kuò)展

java寫一個(gè)從某個(gè)時(shí)間開始倒計(jì)時(shí)的程序

在日常生活中,我們經(jīng)常會(huì)遇到需要進(jìn)行倒計(jì)時(shí)的情況,比如倒計(jì)時(shí)比賽開始、倒計(jì)時(shí)活動(dòng)結(jié)束等。通過編寫一個(gè)簡(jiǎn)單的Java程序,我們可以實(shí)現(xiàn)一個(gè)從某個(gè)時(shí)間開始倒計(jì)時(shí)的功能。這篇文章將向大家介紹如何使用Java來實(shí)現(xiàn)這個(gè)倒計(jì)時(shí)程序,并提供代碼示例。

實(shí)現(xiàn)原理

倒計(jì)時(shí)程序的實(shí)現(xiàn)原理其實(shí)很簡(jiǎn)單:我們需要獲取當(dāng)前時(shí)間和目標(biāo)時(shí)間的差值,然后不斷減少這個(gè)差值,直到倒計(jì)時(shí)結(jié)束。在Java中,我們可以使用java.util.Date或者java.time.LocalDateTime來表示時(shí)間,并通過計(jì)算兩個(gè)時(shí)間的毫秒差值來實(shí)現(xiàn)倒計(jì)時(shí)。

代碼示例

下面是一個(gè)簡(jiǎn)單的Java倒計(jì)時(shí)程序的實(shí)現(xiàn),我們?cè)O(shè)置一個(gè)目標(biāo)時(shí)間,然后每秒更新一次倒計(jì)時(shí)的剩余時(shí)間,直到倒計(jì)時(shí)結(jié)束。

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class CountdownTimer {
    public static void main(String[] args) {
        LocalDateTime targetTime = LocalDateTime.now().plusMinutes(1); // 設(shè)置目標(biāo)時(shí)間為當(dāng)前時(shí)間的1分鐘后

        while (LocalDateTime.now().isBefore(targetTime)) {
            LocalDateTime currentTime = LocalDateTime.now();
            long secondsLeft = currentTime.until(targetTime, ChronoUnit.SECONDS);

            System.out.println("倒計(jì)時(shí)剩余時(shí)間:" + secondsLeft + "秒");

            try {
                Thread.sleep(1000); // 每隔1秒更新一次倒計(jì)時(shí)
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("倒計(jì)時(shí)結(jié)束!");
    }
}

運(yùn)行結(jié)果

當(dāng)我們運(yùn)行上面的倒計(jì)時(shí)程序時(shí),控制臺(tái)將輸出類似如下的內(nèi)容:

倒計(jì)時(shí)剩余時(shí)間:59秒
倒計(jì)時(shí)剩余時(shí)間:58秒
倒計(jì)時(shí)剩余時(shí)間:57秒
...
倒計(jì)時(shí)結(jié)束!

到此這篇關(guān)于java實(shí)現(xiàn)固定時(shí)段倒計(jì)時(shí)的示例代碼的文章就介紹到這了,更多相關(guān)java倒計(jì)時(shí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中@DateTimeFormat和@JsonFormat注解的使用

    java中@DateTimeFormat和@JsonFormat注解的使用

    本文主要介紹了java中@DateTimeFormat和@JsonFormat注解的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Spring Cloud OpenFeign實(shí)現(xiàn)動(dòng)態(tài)服務(wù)名調(diào)用的示例代碼

    Spring Cloud OpenFeign實(shí)現(xiàn)動(dòng)態(tài)服務(wù)名調(diào)用的示例代碼

    在微服務(wù)架構(gòu)中,我們經(jīng)常需要根據(jù)動(dòng)態(tài)傳入的服務(wù)名來遠(yuǎn)程調(diào)用其他服務(wù),例如,你的業(yè)務(wù)中可能有多個(gè)子服務(wù):service-1、service-2……需要?jiǎng)討B(tài)決定調(diào)用哪個(gè),所以本文給大家介紹了Spring Cloud OpenFeign 實(shí)現(xiàn)動(dòng)態(tài)服務(wù)名調(diào)用指南,需要的朋友可以參考下
    2025-06-06
  • 基于Struts2實(shí)現(xiàn)防止表單重復(fù)提交

    基于Struts2實(shí)現(xiàn)防止表單重復(fù)提交

    這篇文章主要介紹了基于Struts2實(shí)現(xiàn)防止表單重復(fù)提交,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • springboot全局字符編碼設(shè)置解決亂碼問題

    springboot全局字符編碼設(shè)置解決亂碼問題

    這篇文章主要介紹了springboot全局字符編碼設(shè)置解決亂碼問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java中的== 和equals()方法詳解與實(shí)例

    Java中的== 和equals()方法詳解與實(shí)例

    本篇文章介紹了,在java中"==" 與equals方法的使用及其實(shí)例,需要的朋友可以參考下
    2017-04-04
  • Java用list儲(chǔ)存,遍歷,查詢指定信息過程詳解

    Java用list儲(chǔ)存,遍歷,查詢指定信息過程詳解

    這篇文章主要介紹了Java用list儲(chǔ)存,遍歷,查詢指定信息過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Springboot中用 Netty 開啟UDP服務(wù)方式

    Springboot中用 Netty 開啟UDP服務(wù)方式

    這篇文章主要介紹了Springboot中用 Netty 開啟UDP服務(wù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring示例講解條件注入方法

    Spring示例講解條件注入方法

    Spring支持按照條件來注入某些特定的bean,這也是Spring Boot實(shí)現(xiàn)自動(dòng)化配置的底層方法,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-06-06
  • JavaFX實(shí)現(xiàn)簡(jiǎn)易時(shí)鐘效果(二)

    JavaFX實(shí)現(xiàn)簡(jiǎn)易時(shí)鐘效果(二)

    這篇文章主要為大家詳細(xì)介紹了JavaFX實(shí)現(xiàn)簡(jiǎn)易時(shí)鐘效果的第二篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 三種Spring BeanName生成器,你了解嗎

    三種Spring BeanName生成器,你了解嗎

    無論我們是通過 XML 文件,還是 Java 代碼,亦或是包掃描的方式去注冊(cè) Bean,都可以不設(shè)置BeanName,而Spring均會(huì)為之提供默認(rèn)的 beanName,本文我們就來看看 Spring 中三種處理不同情況的 beanName生成器吧
    2023-09-09

最新評(píng)論

甘孜县| 龙海市| 京山县| 万州区| 白朗县| 潍坊市| 廉江市| 潞城市| 垫江县| 贵溪市| 平果县| 乐东| 绥宁县| 黑水县| 安泽县| 新余市| 凤冈县| 娄烦县| 上虞市| 岗巴县| 晋州市| 九台市| 平遥县| 南汇区| 岑巩县| 无极县| 丰县| 高陵县| 图木舒克市| 荣成市| 汕尾市| 桐柏县| 四会市| 清丰县| 呼和浩特市| 衡阳市| 温州市| 普格县| 锡林浩特市| 漳浦县| 灌阳县|