Is it possible to change the System Time in Java?
It should run under Windows and Linux. I’ve tried it with the Runtime Class in but there is a problem with the permissions.
This is my code:
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);
The output of cmd is:
date -s "06/01/2011 17:59:01"
But the System time is the same as before.
I will set the time because I am writing an NTP-Client and there I get the time from a NTP-Server and will set it.
Java doesn’t have an API to do this.
Most system commands to do it require admin rights, so
Runtimecan’t help unless you run the whole process as administrator/root or you userunas/sudo.Depending on what you need, you can replace
System.currentTimeMillis(). There are two approaches to this:Replace all calls to
System.currentTimeMillis()with a call to a static method of your own which you can replace:For tests, you can overwrite INSTANCE with something that returns other times. Add more methods to create
Dateand similar objects.If not all code is under your control, install a
ClassLoaderwhich returns a different implementation forSystem. This is more simple than you’d think: