java - 从远程电脑获取系统时间
问题描述
有没有办法从java中的远程PC获取系统时间?远程 PC 与客户端 PC 位于同一网络中。
有一些带有 java gui 的客户端。gui 应该在远程 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 中,我添加了 time difference event.getTimeStamp() + StaticVariables.timeDifference
。
推荐阅读
- least-squares - CVXPY 在二次规划优化问题上返回不可行/不准确
- c# - 如何从.net核心中的pagemodel cs文件将信息传递回剃须刀页面
- swiftui - SwiftUI - 从网络接收数据后导航
- python - Spark:如何从具有属性的多个嵌套 XML 文件转换为 Data Frame 数据
- javascript - Next.js 不加载 jsx
- c - 运行 libserialport (list_ports) 时出错,sp_list_ports() 失败
- javascript - 我的 AJAX 调用函数对于删除表格行是否正确?
- r - R:搜索使用其系数(phi_1 和 phi_2)模拟 AR(2) 的正确种子
- javascript - 用于附加 xml 节点的 Groovy 脚本代码需要 15 多个小时才能获得 6K 员工记录
- docker - docker-compose 变量格式