← Back to list

APP中时间处理

Published on: | Views: 54

1.获取系统时间

//Returns the current time in milliseconds since January 1, 1970 00:00:00.0 UTC.
System.currentTimeMillis();

获取自系统启动以后的毫秒值(**不包括**深度睡眠时间)
SystemClock.uptimeMillis();

获取自系统启动以后的毫秒值(**包括**深度睡眠时间)
SystemClock.elapsedRealtime();

2.APP中对时间的处理

2.1 APP对时间没有特别的要求

获取绝对时间:使用System.currentTimeMillis(),这个时间是系统的当前时间,用户可以修改。 获取相对时间:使用SystemClock.elapsedRealtime(),这个时间用户不可修改。

2.2 APP对时间要求比较严格

这种情况一般是同步一次网络时间,然后与本地时间做差值,从而得到正确的时间

2.2.1自建服务器获取网络时间

localTime = SystemClock.elapsedRealtime();
timeMs = getNetworkTimeFromeServer();
timeMs += (SystemClock.elapsedRealtime() - localTime) / 2;

2.2.2使用网络NTP时间源获取时间

2.2.3本地时间同步

public static synchronized void init(long currentNetworkTimeMs){
    mIsInit=true;
    mTimeOffset=currentNetworkTimeMs- SystemClock.elapsedRealtime();
}
public static long getCurrentTimeMillis(){
    if(mIsInit) {
        return SystemClock.elapsedRealtime() + mTimeOffset;
    }else{
        return System.currentTimeMillis();
    }
}