【发布时间】:2014-08-02 03:23:05
【问题描述】:
出于测试目的,我需要更改 Linux 中的系统时间。到目前为止我所做的是:
Calendar calendar = new GregorianCalendar();
calendar.add(Calendar.HOUR_OF_DAY, 2); //example of a 2 hour alteration
alterSystemTime(calendar.getTime().toString());
public void alterSystemTime(String newTime) {
Runtime.getRuntime().exec("sudo date -s \"" + newTime + "\"");
}
我要重置时间:
public void resetTime() {
Runtime.getRuntime().exec("sudo hwclock --hctosys");
}
alterSystemTime 方法中正在执行的命令示例如下:
sudo date -s "Fri Aug 01 12:15:47 BRT 2014"
这在终端上执行时可以正常工作,但不适用于代码。我已正确配置 etc/sudoers 文件以运行 sudo 命令而无需输入密码。 resetTime 函数按预期工作。我还尝试将日期解析为这样的格式化字符串:
sudo date -s "2014/08/01 11:53:17"
这同样适用于终端,但不适用于程序。
那么,为什么我的方法 alterSystemTime() 不起作用?这是更改系统时间的正确方法吗?
编辑:
根据 Sid 的回答,我在方法上使用了这个:
Runtime.getRuntime().exec(new String[]{ "sudo", "date", "--set", newTime })
【问题讨论】:
-
当你运行
sudo date但它不起作用时,是否有错误信息? -
如何记录 exec 返回?
-
用它来记录stackoverflow.com/a/7715334/869783输出是空的。
-
exec().exitValue() 返回“1”。