为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕标5832272 2019-09-26 14:39:48
是否可以在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()。有两种解决方法:

  1. System.currentTimeMillis()对自己的静态方法的调用替换所有对的调用,可以替换为:

    public class SysTime {
        public static SysTime INSTANCE = new SysTime();
    
        public long now() {
            return System.currentTimeMillis();
        }}

    对于测试,您可以用返回其他时间的内容覆盖INSTANCE。添加更多创建Date和类似对象的方法。

  2. 如果不是所有代码都在您的控制之下,请安装,ClassLoader它返回的不同实现System。这比您想象的要简单:

    @Overridepublic Class<?> loadClass( String name, boolean resolve ) {
        if ( "java.lang.System".equals( name ) ) {
            return SystemWithDifferentTime.class;
        }
    
        return super.loadClass( name, resolve );}


查看完整回答
反对 回复 2019-09-26
?
森林海

TA贡献2011条经验 获得超2个赞

您可以JNI用来设置系统时间。这将在Windows上运行。你需要知道JNIC

这是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);
    }}


查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 820 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信