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

如何用Java在Linux中增加和减少时间,java,linux,datetime,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) {

出于测试目的,我需要在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日期-s“2014年8月1日星期五12:15:47 BRT”

这在终端上执行时可以正常工作,但在代码上不起作用。我正确地配置了etc/sudoers文件,以便在不询问密码的情况下运行sudo命令。resetTime功能按预期工作。我还尝试将日期解析为格式化字符串,如下所示:

sudo date -s "2014/08/01 11:53:17"
同样,它在终端上工作,但在程序上不工作

那么,为什么我的方法alterSystemTime()不起作用呢?这是改变系统时间的正确方法吗

编辑:

根据Sid的回答,我在方法中使用了:

Runtime.getRuntime().exec(new String[]{ "sudo", "date", "--set", newTime })

尝试将字符串数组传递到
.exec()


运行
sudo date
时,如果它不起作用,是否会出现错误消息?如何记录exec返回?使用它记录输出是空的。exec().exitValue()返回“1”。@MarcioB您需要检查是否产生了某种错误。
.exec()
方法返回一个
进程
对象。您需要访问此对象的输入、输出和错误流。请参阅此链接,该链接显示如何访问
OutputStream
InputStream
:。你可以用类似的方法得到
ErrorStream
我就是这么做的,看看我对这个问题的评论。@MarcioB好的。您是否尝试过执行其他shell命令?它们能工作吗?是的,这个问题上的resetTime()方法工作得很好。@MarcioB所以我想不添加
sudo
就运行它是行不通的。尝试使用具有
sudo
的用户运行整个程序。如果这不起作用,那么您也可以尝试:
newstring[]{“sudo-date”、“--set”…
newstring[]{“sudo”、“date”、“--set”…
Runtime.getRuntime().exec(new String[]{ "date", "--set", "2014-08-01 11:53:17" });