客户端校准本地时间为服务端时间

1,590 阅读1分钟

方案有很多:此为最佳:

public class ServerClock {    static long serverTime;    static long serverSetTime;    /**     * app打开后,校准一次即可。     * 内部有机制保证只校准一次     * @param serverTime 服务端真实时间。 考虑传输延迟,可自行加上延时时间。一般是50-500ms。     */    public static void setServerTime(long serverTime){        if(TimeChangeReceiver.serverTime != 0){            return;        }        if(serverTime <= 0){            return;        }        TimeChangeReceiver.serverTime = serverTime;        serverSetTime = SystemClock.elapsedRealtime();    }    /**     * 获取服务端真实时间,用作一些倒计时替换System.currentTimeMillis()。     * @return     */    public static long getServerTime(){        if(serverSetTime ==0){            return System.currentTimeMillis();        }        return serverTime + (SystemClock.elapsedRealtime() - serverSetTime);    }}