时间单位
秒: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();