Android修改系统时间

最近碰到修改系统时间的需求,折腾了一段时间,发现网上有一种方法是通过
命令的方式修改的。

在这里感谢那位老兄的方法。

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作为参数传进去就可以修改系统时间了。

你可能感兴趣的:(Android)