如何通过c#或c++获得真实日期(而不是系统日期)

本文关键字:日期 系统 真实 何通过 c++ | 更新日期: 2023-09-27 17:54:23

有没有可能得到真实的日期(不是系统日期)没有任何连接到互联网?我用c#开发了我的应用程序。DateTime。现在得到系统日期,但我想知道实际日期,因为系统日期可能是错误的。

有可能吗?如何做到这一点?

如何通过c#或c++获得真实日期(而不是系统日期)

如果系统日期错误,则应用程序必须从其他地方获取正确的日期。这意味着需要外部资源。它可以通过网络,也可以是你网络中的另一个服务器,或者你可以手动输入它。没有神奇的解决办法。

No。在没有任何外部通信的情况下,你所拥有的就是电脑里的时钟。如果你不相信这一点,你就完蛋了。

当然,如果你想防止别人破坏软件的限时试用许可,你可以做一些事情,比如记录你见过的最新UTC时间,如果你看到比之前的启动时间更早的启动时间,就会产生怀疑……特别是如果你反复看到它。当然,这和得到真正的日期是不一样的。

只有在知道系统日期与"实际日期"相差多少时才能这样做。如果您在TimeSpan对象中有这个增量,那么您可以使用DateTime.Now.Add(delta)创建"真实日期"。如果没有网络连接,则必须通过其他方式获得增量,例如用户输入的值。但是,这将是困难的,因为机器上系统时钟的频率可能会变化。

即使没有互联网,也有其他"可靠"的外部时间来源。然而,互联网是最简单的,并且已经存在许多时间协议/服务器。这些只是想法,不一定是可行的解决方案。

  1. NIST原子钟广播(例如那些"原子钟"是如何工作的)。我不确定有什么商用硬件能让PC读取这些信号。

  2. GPS。有很多不同的GPS硬件可以连接到PC (USB加密狗等)。甚至是iPhone。(即使没有GPS支持,现代手机也可以从网络获得时间同步。)

  3. 你自己的原子钟!漂移应该是可以忽略的;-)

快乐……的东西。

没有互联网,你将需要一个GPS接收器或无线电时钟设备。

你可以调用NTP服务器,如果你能建立某种形式的互联网连接,应该提供准确的(原子)时间。据我所知,c#没有内置NTP客户端,但有一个可用:

http://mftoolkit.codeplex.com/

关于NTP的信息可以在这里找到:

http://en.wikipedia.org/wiki/Network_Time_Protocol