会有一个比较常见的需求,计算倒计时,比如,计算距离某时间剩余时间(27小时10分钟30秒、1天3小时10分钟30秒)或者已经进行了多长时间等。下面是2种实现代码:其中第一种超过1天会体现在小时上,比如27小时10分钟30秒。

    /**
* 根据毫秒值计算倒计时
* @param millis 相差毫秒值
* @return 返回倒计时,millis 小于等于0 返回:0小时0分钟0秒
*/
public static String countdown(long millis){
if (millis <= 0) {
return "0小时0分钟0秒";
}
Duration duration = Duration.ofMillis(millis);
long hours = duration.getSeconds() / XkTimeConstant.SECONDS_PER_HOUR;
int minutes = (int) ((duration.getSeconds() % XkTimeConstant.SECONDS_PER_HOUR) / XkTimeConstant.SECONDS_PER_MINUTE);
int seconds = (int) (duration.getSeconds() % XkTimeConstant.SECONDS_PER_MINUTE);
StringBuilder buf = new StringBuilder(24);
buf.append(hours).append("小时");
buf.append(minutes).append("分钟");
buf.append(seconds).append("秒");
return buf.toString();
} /**
* 根据毫秒值计算倒计时,包含天数
* @param millis 相差毫秒值
* @return 返回倒计时,millis 小于等于0 返回:0天0小时0分钟0秒
*/
public static String countdownWithDay(long millis){
if (millis <= 0) {
return "0天0小时0分钟0秒";
}
Duration duration = Duration.ofMillis(millis);
long days = duration.getSeconds() / XkTimeConstant.SECONDS_PER_DAY;
int hours = (int) ((duration.getSeconds() % XkTimeConstant.SECONDS_PER_DAY) / XkTimeConstant.SECONDS_PER_HOUR);
int minutes = (int) ((duration.getSeconds() % XkTimeConstant.SECONDS_PER_HOUR) / XkTimeConstant.SECONDS_PER_MINUTE);
int seconds = (int) (duration.getSeconds() % XkTimeConstant.SECONDS_PER_MINUTE);
StringBuilder buf = new StringBuilder(24);
buf.append(days).append("天");
buf.append(hours).append("小时");
buf.append(minutes).append("分钟");
buf.append(seconds).append("秒");
return buf.toString();
}

源码地址: https://github.com/xkzhangsan/xk-time

Java日期时间API系列41-----根据毫秒值计算倒计时的更多相关文章

  1. Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格式化和时区转换等。

    通过Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中时间范围示意图:可以很清晰的看出ZonedDateTime相当于LocalDateTime+ZoneI ...

  2. Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析

    目录 0.前言 1.TemporalAccessor源码 2.Temporal源码 3.TemporalAdjuster源码 4.ChronoLocalDate源码 5.LocalDate源码 6.总 ...

  3. Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate

    通过Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的优点,java8具有很多优点,现在网上查到的农历转换工具类都是基于jdk7及以前的类写的,下面使用ja ...

  4. Java日期时间API系列12-----Jdk8中java.time包中的新的日期时间API类,日期格式化,常用日期格式大全

    通过Java日期时间API系列10-----Jdk8中java.time包中的新的日期时间API类的DateTimeFormatter, 可以看出java8的DateTimeFormatter完美解决 ...

  5. Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  6. Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date等

    从前面的系列博客中可以看出Jdk8中java.time包中的新的日期时间API类设计的很好,但Date由于使用仍非常广泛,这就涉及到Date转LocalDateTime,LocalDateTime转D ...

  7. Java日期时间API系列3-----Jdk7及以前的日期时间类的不方便使用问题

    使用Java日期时间类,每个人都很熟悉每个项目中必不可少的工具类就是dateutil,包含各种日期计算,格式化等处理,而且常常会遇到找不到可用的处理方法,需要自己新增方法,处理过程很复杂. 1.Dat ...

  8. Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点

    1.不变性 新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处. 比如:LocalDateTime 2.关注点分离 新的API将人可读的日期时间和机器时间(unix timestamp ...

  9. Java日期时间API系列10-----Jdk8中java.time包中的新的日期时间API类的DateTimeFormatter

    1.DateTimeFormatter final修饰,线程安全,用于打印和解析日期-时间对象的格式化程序. 创建DateTimeFormatter: DateTimeFormatter dateTi ...

  10. Java日期时间API系列1-----Jdk7及以前的日期时间类

    先看一个简单的图: 主要的类有: Date类负责时间的表示,在计算机中,时间的表示是一个较大的概念,现有的系统基本都是利用从1970.1.1 00:00:00 到当前时间的毫秒数进行计时,这个时间称为 ...

随机推荐

  1. app专项测试:app弱网测试(网络测试流程)

    app专项测试:app弱网测试(网络测试流程) 一.网络测试的一般流程 step1:首先要考虑网络正常的情况 ① 各个模块的功能正常可用 ② 页面元素/数据显示正常 step2:其次要考虑无网络的情况 ...

  2. BCLinux 8.2安装配置图解教程--龙蜥社区国产移动云系统

    社区镜像下载地址:https://openanolis.cn/download 安装参考地址:https://www.osyunwei.com/archives/13017.html 1安装系统 界面 ...

  3. java 使用openoffice将doc、docx、ppt、pptx等转换pdf格式文件

    软件的安装与配置 链接: 官网 / C**N / 毒盘:提取码k47b 有能力的大佬可以选择c**n下载支持支持,官网下载可能有点慢 Windows下安装配置 下载安装包,安装到硬盘(这个就不截图了吧 ...

  4. 【转转】 Huber Loss

    原文地址: https://www.cnblogs.com/nowgood/p/Huber-Loss.html ============================================ ...

  5. 【转载】 numpy数据类型dtype转换

    原文地址: https://www.cnblogs.com/hhh5460/p/5129032.html =============================================== ...

  6. springmvc配置文件中配置mybatis-plus日志输出

    1.背景 2.配置方式 如果application.properties文件格式: #sql日志logging.level.com.XX.XXX.mapper=debug如果是application. ...

  7. 9.150 Predefined macros

    9.150 Predefined macros The ARM compiler predefines a number of macros. These macros provide informa ...

  8. 如何将Linux的NIC 名称更改为 eth0 而不是 enps33 或 enp0s25,只要几秒钟

    概述 我们使用Linux系统,网卡名称通常都是eth0,但是有一些新的linux发行版,网卡名字 enps33 或 enp0s25. peng@ubuntu:~$ ifconfig ens33 Lin ...

  9. JavaScript设计模式样例十二 —— 享元模式

    享元模式(Flyweight Pattern) 定义:减少创建对象的数量,以减少内存占用和提高性能.目的:用共享技术有效地支持大量细粒度的对象.场景:系统中有大量对象. // 构建享元对象 class ...

  10. 异常处理,内置方法(__new__,__init__,__del__析构方法,单例模式,item系列)

    __new__ 创建一个对象 class A: def __init__(self): print('in init') def __new__(cls): print('in new') self= ...