从远程电脑获取系统时间
Get system time from a remote pc
有没有办法从 java 中的远程 PC 获取系统时间?
远程 PC 与客户端 PC 在同一网络中。
有些客户端具有 java gui。 guis 应登录远程 PC 上的同一文件。为此,我使用了 slf4j api 的 RollingFileAppender。
但我想,日志时间是服务器时间。
客户可以有不同的时间,他们无权更改时钟。
所以我的想法是获取远程pc服务器时间,获取时差并用服务器时间登录。
但是我找不到类似的东西。
客户端和服务器没有互联网连接。
而且我不想更改服务器上的某些内容。除非没有别的办法。
gui 使用 java 1.6 运行。
我知道有一些 TCP 连接方式。但是为此我必须编写并执行服务器程序或安装 NTP 服务器。
您对解决我的问题有什么建议或想法吗?
我找到了解决问题的方法。
我在 windows.
上激活了 ntp 服务器
在 gui 启动时,我得到了从远程 pc 到客户端的时差。
NTPUDPClient client = new NTPUDPClient();
client.setDefaultTimeout(5000);
client.open();
InetAddress hostAddr = InetAddress.getByName(confFile.getIpAddresse());
TimeInfo info = client.getTime(hostAddr, 8110);
info.computeDetails(); // compute offset/delay if not already done
Long offsetValue = info.getOffset();
Long delayValue = info.getDelay();
String delay = (delayValue == null) ? "0" : delayValue.toString();
String offset = (offsetValue == null) ? "0" : offsetValue.toString();
System.out.println(" Roundtrip delay(ms)=" + delay + ", clock offset(ms)=" + offset);
// offset in ms
client.close();
StaticVariables.timeDifference = Long.parseLong(offset);
为了修改 log4j 日志记录的时间戳,我创建了一个自定义的 RollingFileAppender:
public class CustomRollingFileAppender extends RollingFileAppender
{
@Override
protected void subAppend(LoggingEvent event)
{
LoggingEvent modifiedEvent = new LoggingEvent(event.getFQNOfLoggerClass(), event.getLogger(),
event.getTimeStamp() + StaticVariables.timeDifference, event.getLevel(), event.getMessage(), event.getThreadName(),
event.getThrowableInformation(), event.getNDC(), event.getLocationInformation(), event.getProperties());
super.subAppend(modifiedEvent);
}
}
在这个appender中我添加了时差event.getTimeStamp() + StaticVariables.timeDifference
。
有没有办法从 java 中的远程 PC 获取系统时间? 远程 PC 与客户端 PC 在同一网络中。
有些客户端具有 java gui。 guis 应登录远程 PC 上的同一文件。为此,我使用了 slf4j api 的 RollingFileAppender。
但我想,日志时间是服务器时间。
客户可以有不同的时间,他们无权更改时钟。
所以我的想法是获取远程pc服务器时间,获取时差并用服务器时间登录。
但是我找不到类似的东西。
客户端和服务器没有互联网连接。
而且我不想更改服务器上的某些内容。除非没有别的办法。
gui 使用 java 1.6 运行。
我知道有一些 TCP 连接方式。但是为此我必须编写并执行服务器程序或安装 NTP 服务器。
您对解决我的问题有什么建议或想法吗?
我找到了解决问题的方法。
我在 windows.
上激活了 ntp 服务器
在 gui 启动时,我得到了从远程 pc 到客户端的时差。
NTPUDPClient client = new NTPUDPClient();
client.setDefaultTimeout(5000);
client.open();
InetAddress hostAddr = InetAddress.getByName(confFile.getIpAddresse());
TimeInfo info = client.getTime(hostAddr, 8110);
info.computeDetails(); // compute offset/delay if not already done
Long offsetValue = info.getOffset();
Long delayValue = info.getDelay();
String delay = (delayValue == null) ? "0" : delayValue.toString();
String offset = (offsetValue == null) ? "0" : offsetValue.toString();
System.out.println(" Roundtrip delay(ms)=" + delay + ", clock offset(ms)=" + offset);
// offset in ms
client.close();
StaticVariables.timeDifference = Long.parseLong(offset);
为了修改 log4j 日志记录的时间戳,我创建了一个自定义的 RollingFileAppender:
public class CustomRollingFileAppender extends RollingFileAppender
{
@Override
protected void subAppend(LoggingEvent event)
{
LoggingEvent modifiedEvent = new LoggingEvent(event.getFQNOfLoggerClass(), event.getLogger(),
event.getTimeStamp() + StaticVariables.timeDifference, event.getLevel(), event.getMessage(), event.getThreadName(),
event.getThrowableInformation(), event.getNDC(), event.getLocationInformation(), event.getProperties());
super.subAppend(modifiedEvent);
}
}
在这个appender中我添加了时差event.getTimeStamp() + StaticVariables.timeDifference
。