出于测试目的,我需要在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 })
答案 0 :(得分:1)
尝试将String数组传递给.exec()
:
Runtime.getRuntime().exec(new String[]{ "date", "--set", "2014-08-01 11:53:17" });