android时间戳差8小时问题
最近在做的android项目里面有个修改系统的问题,当初转的时候,时间戳怎么转都差8个小时的问题,后面觉得不对劲,觉得应该是转的时候时间本身就是转错的。
系统设置的是GMT+8,也就是东八区,,时间是从服务器上面传下来的,关闭了系统从网上同步时间的按钮,然后直接将拿下来的时间转化成系统时间,差8小时,设置时间的时候多涨一个心眼,在设置时加一句 mCalendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));结果显示出来的还好,在后台算时间戳的时候一直有问题,想一想肯定是设置时间的时候没有设置好。我们知道时间戳是不随着时区变化而变化的,那就是拿到的时间戳不能直接去设置时间,而是先要减去一个时间8*60*60*1000,这样子再在前台去看程序,全部都正确了。
具体demo代码如下(想要修改时间必须要拿到root权限并且在AndroidManifest.xml里面加上<uses-permission android:name="android.permission.SET_TIME" />这句话):
SimpleDateFormat format=new SimpleDateFormat("yyyyMMdd.HHmmss");
Long t=new Long(time);//time是从服务器拿到的时间戳
t=t-8*60*60*1000;
Date date=new Date(t);
String datetime=format.format(date);
try {
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("setprop persist.sys.timezone GMT\n");
os.writeBytes("/system/bin/date -s "+datetime+"\n"); //把时间设置进去,这个地方一定要是yyyyMMdd.HHmmss的形式
os.writeBytes("clock -w\n");
os.writeBytes("exit\n");
os.flush();
} catch (IOException e) {
e.printStackTrace();
return false;
}