最近 项目中用到一些时间类转换的知识点, 作为一个爱学习的 猿人。我又找时间复习了一下这个类
最后更新时间:2021-01-25
简介
TimeUnit是一个枚举类, 位于java.util.concurrent包下。转化时间的细粒度, 提供了跨单元转换的实用方法。也可以 用来延时执行某段程序。
功能
延迟程序
-
直接 上代码
-
public void sayHello() throws InterruptedException { // 这段代码 不难看出, 是让程序睡眠 一秒钟 Thread.sleep(1000); // 这个是让程序 睡眠 一天 Thread.sleep(8640000); System.out.println("Hello friend !"); }
-
时间短的时候, 还是比较容易看出来的。但是时间长了之后, 很难直接看出来
-
Java 官方, 也考虑到了这一点。
-
public void sayHello() throws InterruptedException { // 程序睡眠 一分钟 TimeUnit.MINUTES.sleep(1); // 程序睡眠 三天 TimeUnit.DAYS.sleep(3); System.out.println("Hello friend !"); }
-
使用了工具类, 程序的可读性一下子 提升了
-
当然 它的底层还是 Thread.sleep();
-
public void sleep(long timeout) throws InterruptedException { if (timeout > 0) { long ms = toMillis(timeout); int ns = excessNanos(timeout, ms); Thread.sleep(ms, ns); } }
-
也从 项目代码中看到过 有朋友这样写的代码。
-
每个人都有自己的一种习惯吧
-
作者也想一天睡八个小时哎 (头秃)
-
public void everyday() throws InterruptedException { // 每天睡眠 八小时 Thread.sleep(8 * 60 * 60 * 1000); }
-
时间转换
-
// 将一天转换成毫秒表示 long time1 = TimeUnit.DAYS.toMillis(1); // 将一小时转换成分钟表示 long time2 = TimeUnit.HOURS.toMinutes(1);
-
高级别的时间单位 向低单位转换 还是比较方便的
-
但是 从低单位转换成高单位 经测试 会向下取整
-
// 65分 转成 小时 = 1 long time1 = TimeUnit.MINUTES.toHours(65); // 23小时 转成 天 = 0 long time2 = TimeUnit.HOURS.toDays(23);
拓展
常用细粒度
TimeUnit.DAYS //天
TimeUnit.HOURS //小时
TimeUnit.MINUTES //分钟
TimeUnit.SECONDS //秒
TimeUnit.MILLISECONDS //毫秒
常用方法
public long toMillis(long duration) //转化成毫秒
public long toSeconds(long duration) //转化成秒
public long toMinutes(long duration) //转化成分钟
public long toHours(long duration) //转化成小时
public long toDays(long duration) //转化天
其他的并不常用, 因此并没有写在这里