如何用Java在Linux中增加和减少时间
出于测试目的,我需要在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) {
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" });