java实现固定时段倒计时的示例代码

 更新时间:2025年08月19日 08:40:53   作者:爱码少年 00fly.online  
这篇文章主要为大家详细介绍了java实现固定时段倒计时,可以在每隔一定时间给出时间倒计时提示,文中的示例代码讲解详细,需要的可以了解下

一、简单需求

某系统需要每隔一定时间给出时间倒计时提示,时间倒计时可能为每1、2、3、4、6、8、12或24小时,提示格式为HH:mm:ss

二、代码实现

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};
    
    /**
     * 整点倒计时
     * 
     * @param args
     * @see [类、类#方法、类#成员]
     */
    public static void main(String[] args)
    {
        // 3ms微调值
        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)
    {
        // 定义时间间隔
        Long between = hour * 3600000L;
        long time = between - (System.currentTimeMillis() + 8 * 3600000L) % between;
        
        //去除100ms之内误差
        time += (100 - time % 100); 
        String after = DateFormatUtils.formatUTC(time, "HH':'mm':'ss.SSS");
        log.info("---------------  {} ==> {} H -------------------", after, hour);
    }
}

三、运行结果

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 -------------------

四、知识扩展

java写一个从某个时间开始倒计时的程序

在日常生活中,我们经常会遇到需要进行倒计时的情况,比如倒计时比赛开始、倒计时活动结束等。通过编写一个简单的Java程序,我们可以实现一个从某个时间开始倒计时的功能。这篇文章将向大家介绍如何使用Java来实现这个倒计时程序,并提供代码示例。

实现原理

倒计时程序的实现原理其实很简单:我们需要获取当前时间和目标时间的差值,然后不断减少这个差值,直到倒计时结束。在Java中,我们可以使用java.util.Date或者java.time.LocalDateTime来表示时间,并通过计算两个时间的毫秒差值来实现倒计时。

代码示例

下面是一个简单的Java倒计时程序的实现,我们设置一个目标时间,然后每秒更新一次倒计时的剩余时间,直到倒计时结束。

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

public class CountdownTimer {
    public static void main(String[] args) {
        LocalDateTime targetTime = LocalDateTime.now().plusMinutes(1); // 设置目标时间为当前时间的1分钟后

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

            System.out.println("倒计时剩余时间:" + secondsLeft + "秒");

            try {
                Thread.sleep(1000); // 每隔1秒更新一次倒计时
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("倒计时结束!");
    }
}

运行结果

当我们运行上面的倒计时程序时,控制台将输出类似如下的内容:

倒计时剩余时间:59秒
倒计时剩余时间:58秒
倒计时剩余时间:57秒
...
倒计时结束!

到此这篇关于java实现固定时段倒计时的示例代码的文章就介绍到这了,更多相关java倒计时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

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

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

    本文主要介绍了java中@DateTimeFormat和@JsonFormat注解的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Spring Cloud OpenFeign实现动态服务名调用的示例代码

    Spring Cloud OpenFeign实现动态服务名调用的示例代码

    在微服务架构中,我们经常需要根据动态传入的服务名来远程调用其他服务,例如,你的业务中可能有多个子服务:service-1、service-2……需要动态决定调用哪个,所以本文给大家介绍了Spring Cloud OpenFeign 实现动态服务名调用指南,需要的朋友可以参考下
    2025-06-06
  • 基于Struts2实现防止表单重复提交

    基于Struts2实现防止表单重复提交

    这篇文章主要介绍了基于Struts2实现防止表单重复提交,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • springboot全局字符编码设置解决乱码问题

    springboot全局字符编码设置解决乱码问题

    这篇文章主要介绍了springboot全局字符编码设置解决乱码问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java中的== 和equals()方法详解与实例

    Java中的== 和equals()方法详解与实例

    本篇文章介绍了,在java中"==" 与equals方法的使用及其实例,需要的朋友可以参考下
    2017-04-04
  • Java用list储存,遍历,查询指定信息过程详解

    Java用list储存,遍历,查询指定信息过程详解

    这篇文章主要介绍了Java用list储存,遍历,查询指定信息过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Springboot中用 Netty 开启UDP服务方式

    Springboot中用 Netty 开启UDP服务方式

    这篇文章主要介绍了Springboot中用 Netty 开启UDP服务方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Spring示例讲解条件注入方法

    Spring示例讲解条件注入方法

    Spring支持按照条件来注入某些特定的bean,这也是Spring Boot实现自动化配置的底层方法,文中的示例代码讲解详细,需要的可以参考一下
    2022-06-06
  • JavaFX实现简易时钟效果(二)

    JavaFX实现简易时钟效果(二)

    这篇文章主要为大家详细介绍了JavaFX实现简易时钟效果的第二篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 三种Spring BeanName生成器,你了解吗

    三种Spring BeanName生成器,你了解吗

    无论我们是通过 XML 文件,还是 Java 代码,亦或是包扫描的方式去注册 Bean,都可以不设置BeanName,而Spring均会为之提供默认的 beanName,本文我们就来看看 Spring 中三种处理不同情况的 beanName生成器吧
    2023-09-09

最新评论