网站建设公司新报价,seo的优化方向,动漫设计和动画设计,aspcms 网站标签调用相信很多人看到过Android手机或平板显示XXXX-01-01这个奇怪的日期#xff0c;没错#xff0c;这就是Android设备的默认日期。当Android设备没有联网#xff0c;无法获取当前真实时间的时候#xff0c;就会使用系统默认时间。大部分时候#xff0c;系统默认时间是Epoch时间…相信很多人看到过Android手机或平板显示XXXX-01-01这个奇怪的日期没错这就是Android设备的默认日期。当Android设备没有联网无法获取当前真实时间的时候就会使用系统默认时间。大部分时候系统默认时间是Epoch时间(即1970-01-01 00:00:00 UTC)也有OEM厂商会修改此默认时间。进入正题如何修改默认时间呢很简单修改SystemServer.java中EARLIEST_SUPPORTED_TIME常量的值。如下private void run() {try {traceBeginAndSlog(InitBeforeStartServices);// If a devices clock is before 1970 (before 0), a lot of// APIs crash dealing with negative numbers, notably// java.io.File#setLastModified, so instead we fake it and// hope that time from cell towers or NTP fixes it shortly.if (System.currentTimeMillis() EARLIEST_SUPPORTED_TIME) {Slog.w(TAG, System clock is before 1970; setting to 1970.);SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);}// ......}好了知道了修改EARLIEST_SUPPORTED_TIME可以改变系统默认时间还得知道怎么样修改EARLIEST_SUPPORTED_TIME呀。如果我需要把默认时间改为2016-01-01 00:00 UTC那EARLIEST_SUPPORTED_TIME应该为什么数呢EARLIEST_SUPPORTED_TIME表示的是从Epoch开始所经历的毫秒数回想一下UNIX时间戳表示的是从Epoch开始所经历的秒数。也就是说我们只需要把某个具体时间转换为UNIX时间戳进而就可以转换为EARLIEST_SUPPORTED_TIME值了。怎么把某个时间转换为UNIX时间戳呢不少人编程去做其实大可不必如此麻烦Linux的date命令就可以完成这个转换。如下$ date %s --date 19700101 --utc // 1970-01-01 00:00 UTC0$ date %s --date 20120101 --utc // 2012-01-01 00:00 UTC1325376000$ date %s --date 20160101 --utc // 2016-01-01 00:00 UTC1451606400反之也可以把某个UNIX时间戳转换为具体日期如下$ date --date86400 --utc // Android默认EARLIEST_SUPPORTED_TIME值为86400×10001970年 01月 02日 星期五 00:00:00 UTC$ date --date1451606400 --utc2016年 01月 01日 星期五 00:00:00 UTC$ date --date14516064002016年 01月 01日 星期五 08:00:00 CST注frameworks/base/services/java/com/android/server/SystemServer.java