最近碰到修改系统时间的需求,折腾了一段时间,发现网上有一种方法是通过
命令的方式修改的。
在这里感谢那位老兄的方法。
TimeManager.setSystemTime:
public static void setSystemTime(Date date) {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd.HHmmss", Locale.getDefault());
String dateTime = format.format(date);
ArrayList<String> list = new ArrayList<>();
Map<String, String> map = System.getenv();//获取环境变量的值
for (String env : map.keySet()) {
list.add(env + "=" + map.get(env));
}
String[] str = list.toArray(new String[0]);
String commend = "date -s\"" + dateTime + "\"";
try {
Runtime.getRuntime().exec(new String[]{"su", "-c", commend}, str);
} catch (IOException e) {
e.printStackTrace();
}
}
首先将Date格式的时间转化成需要的yyyyMMdd.HHmmss格式。第二个参数
Locale.getDefault()获取缺省本地国家代码设置,然后根据这个代码显示成不
同的格式。
假设现有一个TextView上显示时间为2016/10/13/18/04 ,现在要将
这个字符串转换成Date类型作为参数。
Date date = new Date();
date.setYear(Integer.valueOf(dateTxt.getText().toString().substring(0, 4)) - 1900);
date.setMonth(Integer.valueOf(dateTxt.getText().toString().substring(5, 7)) - 1);
date.setDate(Integer.valueOf(dateTxt.getText().toString().substring(8, 10)));
date.setHours(Integer.valueOf(timeTxt.getText().toString().substring(11, 13)));
date.setMinutes(Integer.valueOf(timeTxt.getText().toString().substring(14, 16)));
TimeManager.setSystemTime(date);
年份和实际年份会相差1900,而月份相差1,因此需要减去。然后将
Date作为参数传进去就可以修改系统时间了。