[英]Setting milliseconds of System time with java
使用Java在Windows操作系统上是否可以用毫秒为单位设置系统时间? 我正在尝试在几台计算机之间同步时钟,但OS 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客户端如何工作?
解决此问题的一种方法可能是计算服务器应该到达下一秒的时间(以毫秒为单位),然后休眠该时间。 有没有更好,更直接的方法来实现这一目标?
如immibis所述,您可以使用Windows函数SetSystemTime
来设置时间。
在下面找到一个使用JNA 4.2调用Windows函数的代码段
Kernel32 kernel = Kernel32.INSTANCE;
WinBase.SYSTEMTIME newTime = new WinBase.SYSTEMTIME();
newTime.wYear = 2015;
newTime.wMonth = 11;
newTime.wDay = 10;
newTime.wHour = 12;
newTime.wMinute = 0;
newTime.wSecond = 0;
newTime.wMilliseconds = 0;
kernel.SetSystemTime(newTime);
有关更多信息,请查看JNA的源代码以及SetSystemTime Windows函数和SYSTEMTIME结构的那些链接。
2009年开始介绍JNA。 使用JNA简化本机代码访问
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.