Bsr,
En mode console, la commande suivante effectue une mise à l'heure du système :
1 2
| root@ubuntu:/home/hubert# date --set=@'1484334000'
Fri Jan 13 20:00:00 CET 2017 |
Si je transpose en java :
ProcessBuilder pb = new ProcessBuilder("date", "--set=@'" + temps + "'");
à l'éxécution :
1 2 3 4 5 6 7
| root@ubuntu:/home/hubert# /opt/jdk1.7.0_60/bin/java -jar horloge.jar
Commande set Date avec methode inheritIO pour les flux
date: invalid date `@\'1484337568\''
Time long (millisecondes) = 1484337568806
serveur ntp secondes = 1484337568
Time from NTP = 13/01/2017 20:59:28
Heure systeme = 13/01/2017 20:25:40 |
L'erreur vient des simples quotes qui doivent être mal interprétées ; donc la solution :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| ......
import org.apache.commons.net.ntp.*;
.....
timeInfo = timeClient.getTime(inetAddress);
NtpV3Packet message = timeInfo.getMessage();
long serverTime = message.getTransmitTimeStamp().getTime();
long temps = serverTime/1000; // conversion en secondes pour la commande système
ProcessBuilder pb = new ProcessBuilder("date", "--set=@" + temps);
try {
pb.inheritIO();
System.out.println("Commande set Date avec methode inheritIO pour les flux");
Process process = pb.start();
process.waitFor();
} catch (InterruptedException ex){
System.out.println("interrupted except : " + ex);
} |
1 2 3 4 5 6 7
| root@ubuntu:/home/hubert# /opt/jdk1.7.0_60/bin/java -jar horloge.jar
Commande set Date avec methode inheritIO pour les flux
Fri Jan 13 21:10:43 CET 2017
Time long (millisecondes) = 1484338243179
serveur ntp secondes = 1484338243
Time from NTP = 13/01/2017 21:10:43
Heure systeme = 13/01/2017 21:10:43 |
Il ne me reste plus qu'à créer un script qui au boot, effectue un appel à ce petit programme/
Merci à tchize_ pour l'indication de la classe ProcessBuilder et l'utilisation des flux.
Partager