android关于时间 nanoTime(),currentTimeMillis(),uptimeMillis()

时间单位
秒:second
毫秒:Millisecond
微妙:Microsecond
纳秒:nanosecond
1秒 = 1000毫秒;1毫秒=1000微秒, 1微秒=1000纳秒

System.nanoTime()
单位:纳秒
android系统开机到当前的时间
系统设置修改时钟,不影响该时间
重启android系统后该值会重置为0

System.currentTimeMillis()
单位:毫秒(milliseconds)
从1970.1.1 UTC 零点开始到当前的时间
修改系统时钟,会直接修改该时间,可以通过该值推算当前系统时钟的日期和时间
重启手机对该时间无影响

System.nanoTime:返回的时间单位是纳秒,是毫秒的百万分之一。远比毫秒的颗粒度要低。
如下情况,使用,System.currentTimeMillis,计算不出时间差,但是System.nanoTime可以:

public class TimeStampMain {

    public static void main(String[] args) {
        long milliTimeBegin = System.currentTimeMillis();
        long nanoTimeBegin = System.nanoTime();
        for (int i = 0; i < 200; i++){

        }
        long nanoDuration = System.nanoTime() - nanoTimeBegin;
        long milliDuration = System.currentTimeMillis() - milliTimeBegin;

        System.out.println("循环100次消耗的时间:nanoDuration=" + nanoDuration + "纳秒, milliDuration=" + milliDuration + "毫秒");
    }
}

在这里插入图片描述
SystemClock
相关方法
long uptimeMillis()
单位:毫秒
系统重启后将重0开始计算,android系统进入深度睡眠后将会暂停计时

long elapsedRealtime()
单位:毫秒
系统重启后将重新开始计算,android系统进入深度睡眠,不会停止计时。

long currentThreadTimeMillis();
单位:毫秒
线程running的时间,线程Sleep的时间不会计入。

SystemClock.currentThreadTimeMillis() 测试
注意currentThreadTimeMillis()返回的是当前线程running的时间,注意是running的时间。我们通过如下例子来理解什么叫running的时间。并且单位是毫秒。

new Thread(){

  @Override

  public void run() {

    try {
      Log.w(TG, "currentThreadTimeMillis1=" + SystemClock.currentThreadTimeMillis());//日志1
      Thread.sleep(20000);//20s
      Log.w(TG, "currentThreadTimeMillis2=" + SystemClock.currentThreadTimeMillis());//日志2
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

  }

}.start();

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值