方案有很多:此为最佳:
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); }}