如何在Java中设置系统时间?

是否可以在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服务器获取时间并进行设置。


慕标5832272
浏览 821回答 3
3回答

九州编程

Java没有执行此操作的API。大多数系统命令都需要管理员权限,因此Runtime除非您以管理员/ root身份运行整个过程或使用runas/,否则将无济于事sudo。根据需要,您可以替换System.currentTimeMillis()。有两种解决方法:用System.currentTimeMillis()对自己的静态方法的调用替换所有对的调用,可以替换为:public&nbsp;class&nbsp;SysTime&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;SysTime&nbsp;INSTANCE&nbsp;=&nbsp;new&nbsp;SysTime(); &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;long&nbsp;now()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;System.currentTimeMillis(); &nbsp;&nbsp;&nbsp;&nbsp;}}对于测试,您可以用返回其他时间的内容覆盖INSTANCE。添加更多创建Date和类似对象的方法。如果不是所有代码都在您的控制之下,请安装,ClassLoader它返回的不同实现System。这比您想象的要简单:@Overridepublic&nbsp;Class<?>&nbsp;loadClass(&nbsp;String&nbsp;name,&nbsp;boolean&nbsp;resolve&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;"java.lang.System".equals(&nbsp;name&nbsp;)&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;SystemWithDifferentTime.class; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;super.loadClass(&nbsp;name,&nbsp;resolve&nbsp;);}

森林海

您可以JNI用来设置系统时间。这将在Windows上运行。你需要知道JNI和C。这是JNI函数,原型将由javah实用程序生成JNIEXPORT&nbsp;void&nbsp;JNICALL&nbsp;Java_TimeSetter_setSystemTime &nbsp;&nbsp;(JNIEnv&nbsp;*env,&nbsp;jobject&nbsp;obj,&nbsp;jshort&nbsp;hour,&nbsp;jshort&nbsp;minutes)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;SYSTEMTIME&nbsp;st; &nbsp;&nbsp;&nbsp;&nbsp;GetLocalTime(&st);&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;st.wHour&nbsp;=&nbsp;hour;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;st.wMinute&nbsp;=&nbsp;minutes;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;SetLocalTime(&st);&nbsp;&nbsp;&nbsp;}Java JNI包装器将是class&nbsp;TimeSetter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;native&nbsp;void&nbsp;setSystemTime(&nbsp;short&nbsp;hour,&nbsp;short&nbsp;minutes); &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.loadLibrary("TimeSetter"); &nbsp;&nbsp;&nbsp;&nbsp;}}最后,要使用它public&nbsp;class&nbsp;JNITimeSetter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;hour&nbsp;=&nbsp;8; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;minutes&nbsp;=&nbsp;30; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Set&nbsp;the&nbsp;system&nbsp;at&nbsp;8h&nbsp;30m &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TimeSetter&nbsp;ts&nbsp;=&nbsp;new&nbsp;TimeSetter(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ts.setSystemTime(hour,&nbsp;minutes); &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java