是否可以在Java中更改系统时间?
它应该在Windows和Linux下运行.我已尝试使用RuntimeClass,但权限存在问题.
这是我的代码:
String cmd="date -s \""+datetime.format(ntp_obj.getDest_Time())+"\"";
try {
Runtime.getRuntime().exec(cmd);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println(cmd);
Run Code Online (Sandbox Code Playgroud)
输出cmd是:
date -s "06/01/2011 17:59:01"
Run Code Online (Sandbox Code Playgroud)
但系统时间与以前相同.
我将设置时间,因为我正在编写NTP客户端,在那里我从NTP服务器获得时间并设置它.
Aar*_*lla 24
Java没有用于执行此操作的API.
执行此操作的大多数系统命令都需要管理员权限,因此Runtime除非您以管理员/ root身份运行整个过程或使用runas/,否则无法提供帮助sudo.
根据您的需要,您可以更换System.currentTimeMillis().有两种方法:
将所有调用替换为System.currentTimeMillis()您可以替换的自己的静态方法:
public class SysTime {
public static SysTime INSTANCE = new SysTime();
public long now() {
return System.currentTimeMillis();
}
}
Run Code Online (Sandbox Code Playgroud)
对于测试,您可以使用其他时间返回的内容覆盖INSTANCE.添加更多方法来创建Date和类似的对象.
如果并非所有代码都在您的控制之下,请安装一个ClassLoader返回不同实现的代码System.这比你想象的更简单:
@Override
public Class<?> loadClass( String name, boolean resolve ) {
if ( "java.lang.System".equals( name ) ) {
return SystemWithDifferentTime.class;
}
return super.loadClass( name, resolve );
}
Run Code Online (Sandbox Code Playgroud)Jig*_*shi 22
一种方法是使用本机命令.
对于Windows,需要两个命令(日期和时间):
Runtime.getRuntime().exec("cmd /C date " + strDateToSet); // dd-MM-yy
Runtime.getRuntime().exec("cmd /C time " + strTimeToSet); // hh:mm:ss
Run Code Online (Sandbox Code Playgroud)
对于linux,单个命令处理日期和时间:
Runtime.getRuntime().exec("date -s " + strDateTimeToSet); // MMddhhmm[[yy]yy]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64823 次 |
| 最近记录: |