【发布时间】:2016-02-11 03:48:41
【问题描述】:
是否可以在使用 Java 的 Windows 操作系统上使用毫秒组件设置系统时间? 我正在尝试在几台计算机之间同步时钟,但操作系统 API 似乎只提供格式为:HH:MM:SS 的设置时间。
这是我尝试过的:
public static void main(String[] args) throws InterruptedException, IOException {
String time="10:00:20"; // this works
String timeWithMiliseconds = "10:00:20.100"; // this doesn't change time at all
Runtime rt = Runtime.getRuntime();
rt.exec("cmd /C time " + time);
}
我想知道如果无法设置毫秒组件,NTP 客户端如何工作?
解决此问题的一种方法是计算服务器应该到达下一秒的时间(以毫秒为单位),然后在该时间休眠。有没有更好、更直接的方法来实现这一点?
【问题讨论】:
-
因为他们不使用控制台命令设置时间;他们可能使用SetSystemTime 函数,该函数(与任何其他 Windows 函数一样)您无法从 Java 轻松访问。
-
感谢您的评论。所以不可能使用 ProcessBuilder/Runtime 调用该函数,必须使用 JNI 吗?
-
为什么不能直接使用 NTP 客户端?
-
这只是我正在处理的一项任务,不允许这样做。
-
要调用不属于 Java(但 C ish)的方法,您必须使用 JNI stackoverflow.com/a/17035731/995891(或 jna)。或者您可以通过
Runtime启动一个脚本/自定义 exe,允许以毫秒为单位设置时间
标签: java windows time command-line process