【问题标题】:Is there a way to get time and day in C++ without using the system clock?有没有办法在不使用系统时钟的情况下在 C++ 中获取时间和日期?
【发布时间】:2021-04-08 08:35:06
【问题描述】:

这个问题可能听起来很愚蠢,但我的情况是:我在 Jetson Nano(单板计算机)上有一个 C++ 程序,想要获取当前时间和日期。然而,在我的应用程序中,我不能总是将互联网电缆连接到设备。尽管在 Ubuntu 设置中我告诉它自动从 Internet 获取时间,但当它在较长时间后(未连接电源时)开机时,系统时钟会变得混乱并且时间和日期完全错误。这就是我的 C++ 程序(使用 std::chrono::system_clock())然后拾取的内容。

有没有办法解决这个问题?不知何故,make 确实知道系统时间和日期何时设置不正确,即使设备未连接到互联网也是如此。我可以说是因为它在尝试使用“检测到时钟偏差”进行编译时失败。未连接到互联网时如何获取正确的时间和日期?

【问题讨论】:

  • 除非您的设备上有电池来保存日期,否则您不能。 “Jetson Nano RTC”有不少热门歌曲,环顾四周。 (Make 只查看文件时间戳。如果找到在未来 IIRC 中创建的构建输出,它会抱怨。)
  • 作为备用方案,您的程序可以定期将最后已知时间保存到文件中。然后它可以将当前时间与最后一个已知时间进行比较,如果当前时间更早,它可以使用当前时间在开始时与当前时间相比的偏移量,并将该增量添加到最后一个已知时间,并使用该计算时间。我在 1980 年代的 BBS 使用了这种方法,因为如果它断电,RTC 就会不正确(因为电池没电了)。
  • 如果您还没有这样做,请参阅How to add a correct battery for RTC on Jetson Nano

标签: c++ date time clock system-clock


【解决方案1】:

不知何故,即使设备未连接到互联网,make 也知道系统时间和日期何时设置不正确。

'不要害怕。

它只是发现自上次检查以来时间已经倒退,并且知道这自然不是时间的运作方式。是猜测。时钟现在可能错了,也可能以前错了,或者两次都错了。

时钟是您获取时间的地方。如果你没有时钟,你就没有时间。 ?‍♂️ 如果你确实有一个时钟(大多数计算机都有,包括你的),但它是不可追踪的(例如通过连接到本地时间服务器的 NTP 服务器,或互联网上的一个) ,你永远无法相信它。

您的时钟无法追踪,并且已经不可靠,因为显然没有电池可以让它长期保持时间。如果您想知道时间,则至少需要解决其中一个问题,最好同时解决这两个问题。

还好install a backup battery for your Real-Time Clock好像可以,解决了可靠性问题。如果没有可追溯性,您仍然会依赖时钟自身的属性,并且它可能会逐渐失去或获得时间,但如果您手动设置一次,那么您至少会在球场上呆一段时间。您可以查看时钟的规格以了解该范围有多大,以及您可能需要多久从其他来源(例如手表!)更新时间。

【讨论】:

  • 谢谢,我去看看!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2014-01-23
  • 1970-01-01
  • 2011-06-19
相关资源
最近更新 更多