枚举常量
// 天
TimeUnit.DAYS;
// 小时
TimeUnit.HOURS;
// 分钟
TimeUnit.MINUTES;
// 秒
TimeUnit.SECONDS;
// 毫秒
TimeUnit.MILLISECONDS;
常用转换方法
/**
* 转换指定的时间粒度
*/
public long convert(long sourceDuration, TimeUnit sourceUnit);
/**
* 指定时间转换为纳秒
*/
public long toNanos(long duration);
/**
* 指定时间转换为微秒
*/
public long toMicros(long duration);
/**
* 指定时间转换为毫秒
*/
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);
当前时间转换
long currentTime = System.currentTimeMillis();
// 当前时间转换为天
long day = TimeUnit.MILLISECONDS.toDays(currentTime);
// 当前小时数 - 天数转换小时数 得今天的小时数;天的起点是以8点开始
long hour = TimeUnit.MILLISECONDS.toHours(currentTime) - TimeUnit.DAYS.toHours(day);
// 当前分钟数 - 小时数转换的分钟数 得这个小时的分钟数
long minute = TimeUnit.MILLISECONDS.toMinutes(currentTime) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(currentTime));
// 当前秒数 - 分钟数转换的秒数 得这个分钟的秒数
long second = TimeUnit.MILLISECONDS.toSeconds(currentTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(currentTime));
System.out.println(String.format("%s天 %s时 %s分 %s秒", day, hour, minute, second));
运行结果
获取当天凌晨0点的毫秒值
int offset = TimeZone.getDefault().getRawOffset();
long day = TimeUnit.MILLISECONDS.toDays(System.currentTimeMillis() + offset);
System.out.println(TimeUnit.DAYS.toMillis(day) - offset);
超时控制
同一时间只能控制一个线程
Thread thread = new Thread(() -> {
System.out.println("线程开始执行...");
try {
// 等待5s
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
return;
}
System.out.println("线程执行完成...");
});
thread.start();
// 2秒超时
TimeUnit.SECONDS.timedJoin(thread, 2);
if(thread.isAlive()) {
System.out.println("超时中断");
// 中断线程
thread.interrupt();
}
运行结果