获取独立于系统时间的实际日期时间



目标:我正在开发一个可以在在线和离线工作的应用程序。该应用程序具有在应用程序内创建和保存NOTES的功能。此外,该应用程序在首次打开时需要互联网连接。 之后,它可以在离线模式下工作,一旦应用程序获得互联网连接,它将发送所有笔记

问题:我需要将确切的"创建日期"字段与注释一起发送到服务器。 "创建日期"时间必须精确,即使系统时间错误。

当应用程序首次连接到互联网时,我从服务器获得正确的时间。是否可以跟踪独立于系统时间的时间,即使应用程序关闭或系统重新启动,我们第一次从服务器获得的时间也是如此。

我尝试使用PerformanceCounter("System", "System Up Time",使系统正常运行时间。 即使应用程序关闭,我也能跟踪时间。 但无法跟踪用户是否重新启动了系统。

此外,即使用户在离线模式下故意更改系统时间,我也需要跟踪正确的时间。在 C# 中是否有任何回调函数?

注意:我正在使用SQLlite作为后端,我可以用它做什么吗?

您可以考虑两个选项:

  • 使用Stopwatch,它专为测量经过的时间而设计。在检索服务器时间时开始,然后可以随时将经过的时间添加到服务器时间中。但是,我不知道如果您挂起到Stopwatch会发生什么,如果有人挂起计算机。
  • 检索服务器时间时,请注意系统时钟的值(使用DateTime.UtcNow- 此处不涉及本地时间),并将两者进行比较以获取两个时钟之间的增量。您可以随时应用增量,以预测服务器时钟会显示的内容。此方法的注意事项:
    • 如果本地时钟运行缓慢或快速(或由 Windows 时间服务等服务进行调整),则增量可能会变得不正确。
    • 如果用户调整系统本地时钟,您将遇到问题。

基本上没有互联网连接,您拥有的唯一时间源是本地系统。问题有多大取决于您担心的故障模式 - 如果只是方便笔记有正确的时间,并且您不必担心恶意用户更改时钟,这可能不是太大的问题。如果你绝对需要一个准确、独立的时间戳,那么你基本上就被卡住了。

(当然,您可以通过反复占用服务器时间并将其与您期望的任何内容进行比较来稍微完善这些方案 - 这可以帮助检测篡改或偶然漂移。但在某些时候你会离线,从那时到下次你在线之间,你没有什么可以做的。

尝试使用 UTC 日期而不是正常的获取日期函数

在 C# 中

DateTime.UTCNow

在 SQL 服务器中

getutcdate()

最新更新