如何使用Java增加和减少Linux中的时间

时间:2014-08-01 13:30:35

标签: java linux datetime

出于测试目的,我需要在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 })

1 个答案:

答案 0 :(得分:1)

尝试将String数组传递给.exec()

Runtime.getRuntime().exec(new String[]{ "date", "--set", "2014-08-01 11:53:17" });