window 用户本身没有修改系统时间的权限
cmd下:
C:\Users\TEDA>date 05-20-2013
A required privilege is not held by the client.通过程序将系统时间修改为三个月后时间,执行不报错,时间并未修改,但是程序并未捕获到异常,为什么呢?如何catch到没权限的异常,谢谢。import java.text.SimpleDateFormat;
import java.util.Calendar;public class Test { public final static String DEFAULTDATEPATTERN2 = "MM-dd-yyyy";
public final static SimpleDateFormat DEFAULTDATEFORMATTER2 = new SimpleDateFormat(DEFAULTDATEPATTERN2);

public static void main(String args[]) { Calendar calendar = Calendar.getInstance();
// zero out the hours, minutes and seconds
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.add(Calendar.MONTH, 3);

//Thread unsafe
String datestr=DEFAULTDATEFORMATTER2.format(calendar.getTime());
System.out.println(datestr);
Runtime rt = Runtime.getRuntime();
try {
rt.exec("cmd /C date " + datestr);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

解决方案 »

  1.   


                proc = Runtime.getRuntime().exec(command);            BufferedReader isInfo = proc.getInputStream();
                BufferedReader isError = proc.getErrorStream();
    给楼主一种使用方法,A required privilege is not held by the client.这句应该可以在isError中读出来。
      

  2.   

    改为: rt.exec("cmd /C start date " + datestr);
      

  3.   

    这个应该不能抛异常。
    因为你只要有执行cmd的权限,对于程序而言就是正确的。至于你有没有权限修改日期,这是cmd的事。
    所以你可以换个思路啊,执行完了之后再次获取时间,验证一下是否修改。
      

  4.   

    vista以上系统UAC开启时需要管理员权限
    也许可以通过返回值判断
      

  5.   

    Runtime.getRuntime().exec("cmd /c date 2013/05/20").waitFor()
    成功返回0,返回其他值失败