是否可以在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);输出cmd为:date -s "06/01/2011 17:59:01"但是系统时间与以前相同。我将设置时间,因为我正在编写NTP客户端,然后从NTP服务器获取时间并进行设置。
3 回答
九州编程
TA贡献1785条经验 获得超4个赞
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(); }}
对于测试,您可以用返回其他时间的内容覆盖INSTANCE。添加更多创建
Date
和类似对象的方法。如果不是所有代码都在您的控制之下,请安装,
ClassLoader
它返回的不同实现System
。这比您想象的要简单:@Overridepublic Class<?> loadClass( String name, boolean resolve ) { if ( "java.lang.System".equals( name ) ) { return SystemWithDifferentTime.class; } return super.loadClass( name, resolve );}
森林海
TA贡献2011条经验 获得超2个赞
您可以JNI
用来设置系统时间。这将在Windows上运行。你需要知道JNI
和C
。
这是JNI函数,原型将由javah
实用程序生成
JNIEXPORT void JNICALL Java_TimeSetter_setSystemTime (JNIEnv *env, jobject obj, jshort hour, jshort minutes) { SYSTEMTIME st; GetLocalTime(&st); st.wHour = hour; st.wMinute = minutes; SetLocalTime(&st); }
Java JNI包装器将是
class TimeSetter { public native void setSystemTime( short hour, short minutes); static { System.loadLibrary("TimeSetter"); }}
最后,要使用它
public class JNITimeSetter { public static void main(String[] args) { short hour = 8; short minutes = 30; // Set the system at 8h 30m TimeSetter ts = new TimeSetter(); ts.setSystemTime(hour, minutes); }}
添加回答
举报
0/150
提交
取消