是否可以在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
提交
取消
