首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检测系统时钟是否改变?

检测系统时钟是否改变?
EN

Stack Overflow用户
提问于 2009-07-15 10:53:45
回答 7查看 5.5K关注 0票数 5

我正在考虑一个Java项目的想法,该项目可以检测计算机时钟何时被更改。这个想法是将日期和时间记录在计算机时钟上,并将其存储在一个文件中。然后,我希望能够对其运行规则,以便在时钟更改时显示一条消息。我也在考虑加入一些规则,比如“不允许超过5分钟的更改”。这是为了方便将时间改变为奇数分钟。

我还需要结合时钟所做的更改。例如,在一年中的某些时间(英国时间)向前推进一个小时或向后返回一个小时。

我不确定是否已经有Java系统可以做到这一点,但我真的不知道从哪里开始。

EN

Stack Overflow用户

发布于 2016-07-10 07:21:15

你似乎要求的是两种截然不同的东西:

  • 当用户或系统管理员将计算机的时钟调整或校正到某个特定时刻(设置为真实的当前日期-时间或另一个过去/未来的日期-时间,以便进行测试或恶意更改显示的小时-分钟)时,例如Daylight Saving Time (DST)

时钟操作

首先,没有简单的好方法来做到这一点。您可以偶尔采样当前日期-时间,将其记录下来,然后稍后再采样。您可以在UTC中这样做,以避免将DST秋季更改误认为是用户/系统管理员更改。

使用java.time类的示例代码。避免使用过时的非java.time类,因为它们设计得很差、令人困惑且麻烦。

代码语言:javascript
运行
复制
Instant now1 = Instant.now(); // Record, run again, compare.
String now1AsString = now1.toString();  // Ex: 2011-12-03T10:15:30.724Z
…
Instant now2 = Instant.now();  
Boolean timeWentBackwards = now2.isBefore( now1 );

当然,你不能用这种技术来适应未来,只能用来适应过去。时钟总是在向未来移动。

检测时钟骚扰的唯一可靠方法是拥有多个时钟。您需要对受信任的时钟具有受信任的访问(连接)权限,该时钟可能是您网络上的时间服务器或Internet上的时间服务器。即使这样,只有一对时钟也是很棘手的。正如一句古老的航海格言所说:“带上一个或三个罗盘。”

DST转存

检测DST变化应该是不相关的。处理日期-时间的一般最佳实践是使用UTC。这包括大部分业务逻辑、数据存储和数据交换。

记住:使用DST向前或向后滚动一天中的时间是没有意义的--时间继续流动,而不是翘曲,以相同的秒数流逝。

票数 0
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1130709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档