Java-TimeUnit类常用方法详解

这次主要整理下Java中TimeUnit类的常用方法


一、TimeUnit类的定义

  • TimeUnit类是一个枚举类,主要用于时间颗粒度的转换与线程的延时
  • TimeUnit主要包含了以下几个枚举常量
    • SECONDS:秒
    • MINUTES:分
    • HOURS:时
    • DAYS:日
    • NANOSECONDS:纳秒,等于 1 10 9 s
    • MICROSECONDS:微秒,等于 1 10 6 s
    • MILLISECONDS:毫秒,等于 1 10 3 s

二、TimeUnit类的常用方法

  1、toDays(long duration)

  • 将指定颗粒度的时间转换为天数
// 将1天转换为天数
System.out.println(TimeUnit.DAYS.toDays(1)); // 1

  2、toHours(long duration)

  • 将指定颗粒度的时间转换为小时数
// 将1天转换为小时数
System.out.println(TimeUnit.DAYS.toHours(1)); // 24

  3、toMinutes(long duration)

  • 将指定颗粒度的时间转换为分数
// 将1天转换为分数
System.out.println(TimeUnit.DAYS.toMinutes(1)); // 1440

  4、toSeconds(long duration)

  • 将指定颗粒度的时间转换为秒数
// 将1天转换为秒数
System.out.println(TimeUnit.DAYS.toSeconds(1)); // 86400

  5、toMillis(long duration)

  • 将指定颗粒度的时间转换为毫秒数
// 将1天转换为毫秒数
System.out.println(TimeUnit.DAYS.toMillis(1)); // 86400000

  6、toMicros(long duration)

  • 将指定颗粒度的时间转换为微秒数
// 将1天转换为微秒数
System.out.println(TimeUnit.DAYS.toMicros(1)); // 86400000000

  7、toNanos(long duration)

  • 将指定颗粒度的时间转换为纳秒数
// 将1天转换为纳秒数
System.out.println(TimeUnit.DAYS.toNanos(1)); // 86400000000000

  8、convert(long sourceDuration, TimeUnit sourceUnit)

  • 将参数颗粒度时间转换为指定颗粒度时间
// 将48小时转换为天数
System.out.println(TimeUnit.DAYS.convert(48, TimeUnit.HOURS)); // 2

  9、compareTo(E o)

  • 比较两个枚举常量的索引值大小,返回一个差值
    这里写图片描述
System.out.println(Arrays.toString(TimeUnit.values())); // [NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS]
// DAYS的索引值为6
System.out.println(TimeUnit.DAYS.ordinal()); //6
// MINUTES的索引值为4
System.out.println(TimeUnit.MINUTES.ordinal()); // 4
System.out.println(TimeUnit.DAYS.compareTo(TimeUnit.MINUTES)); // 2
System.out.println(TimeUnit.MINUTES.compareTo(TimeUnit.DAYS)); // -2

  10、sleep(long timeout)

扫描二维码关注公众号,回复: 2730231 查看本文章
  • 提供了可读性更好的线程休眠操作,通常用来替换Thread.sleep()
  • 当使用Thread.sleep()方法时,由于输入的参数为毫秒数,所以很难看出当前线程具体休眠了多长时间
Thread.sleep(2000);
// 休眠两秒钟,可以很清楚的看到时间颗粒度为秒
TimeUnit.SECONDS.sleep(2);

  11、timedJoin(Thread thread, long timeout)

  • 对指定线程,休眠指定的毫秒数
// 对主线程休眠2秒
TimeUnit.SECONDS.timedJoin(Thread.currentThread(), 2);

  12、timedWait(Object obj, long timeout)

  • 对指定对象,休眠指定的毫秒数
public class Test {
    // 此处需要使用synchronized关键字将方法锁住
    public synchronized void show() throws InterruptedException {
        TimeUnit.SECONDS.timedWait(this, 2);
        System.out.println("HelloWorld");
    }

    public static void main(String[] args) throws InterruptedException {
        Test test = new Test();
        // 两秒之后执行
        test.show();
    }
}

猜你喜欢

转载自blog.csdn.net/Goodbye_Youth/article/details/81608447