C# 获取与SystemTime无关的实际日期时间

C# 获取与SystemTime无关的实际日期时间,c#,windows,c#-4.0,C#,Windows,C# 4.0,目标:我正在开发一个可以在线和离线工作的应用程序。该应用程序具有在应用程序中创建和保存注释的功能。此外,该应用程序第一次打开时需要连接互联网。之后,它可以在离线模式下工作,一旦应用程序连接到互联网,它将发送所有的笔记 问题:我需要将准确的“创建日期”字段与注释一起发送到服务器。“创建日期”时间必须精确,即使系统时间错误 当应用程序第一次连接到internet时,我从服务器获得了正确的时间。即使应用程序关闭或系统重新启动,我们是否可以通过第一次从服务器获取的时间来跟踪独立于系统时间的时间 我尝试了

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

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

当应用程序第一次连接到internet时,我从服务器获得了正确的时间。即使应用程序关闭或系统重新启动,我们是否可以通过第一次从服务器获取的时间来跟踪独立于系统时间的时间

我尝试了
PerformanceCounter(“系统”、“系统启动时间”
),它提供了系统正常运行时间。即使应用程序关闭,我也能够跟踪时间。但无法跟踪用户是否重新启动了系统

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

注意:我使用SQLlite作为后端,有什么我可以做的吗?

您可以考虑两个选项:

  • 使用
    秒表
    ,它是为测量运行时间而设计的。在检索服务器时间时开始测量,然后您可以随时将运行时间添加到服务器时间中。但是,如果有人暂停机器,我不知道如果您暂停使用
    秒表
    ,会发生什么
  • 检索服务器时间时,请注意系统时钟的值(使用
    DateTime.UtcNow
    -此处不涉及本地时间),并比较两者以获得两个时钟之间的增量。您可以在任何时候应用增量来预测服务器时钟将显示的内容。此方法的注意事项:
    • 如果本地时钟运行缓慢或快速(或由Windows Time service之类的服务进行调整),则增量可能不正确
    • 如果用户调整系统本地时钟,您将遇到问题
基本上没有互联网连接,你唯一的时间来源就是本地系统。问题的严重程度取决于你所担心的故障模式——如果只是为了方便起见,便笺会有正确的时间,而你不需要担心恶意用户改变时钟,那可能就不太严重了这是一个很大的问题。如果你绝对需要一个准确、独立的时间戳,那么你基本上被卡住了

(当然,您可以通过反复使用服务器时间并将其与您期望的时间进行比较来稍微改进这些方案-这有助于检测篡改或偶然漂移。但在某个时候,您会离线,从那时到下一次联机之间,您可以做的事情不多。)

您可以考虑两个选项:

  • 使用
    秒表
    ,它是为测量运行时间而设计的。在检索服务器时间时开始测量,然后您可以随时将运行时间添加到服务器时间中。但是,如果有人暂停机器,我不知道如果您暂停使用
    秒表
    ,会发生什么
  • 检索服务器时间时,请注意系统时钟的值(使用
    DateTime.UtcNow
    -此处不涉及本地时间),并比较两者以获得两个时钟之间的增量。您可以在任何时候应用增量来预测服务器时钟将显示的内容。此方法的注意事项:
    • 如果本地时钟运行缓慢或快速(或由Windows Time service之类的服务进行调整),则增量可能不正确
    • 如果用户调整系统本地时钟,您将遇到问题
基本上没有互联网连接,你唯一的时间来源就是本地系统。问题的严重程度取决于你所担心的故障模式——如果只是为了方便起见,便笺会有正确的时间,而你不需要担心恶意用户改变时钟,那可能就不太严重了这是一个很大的问题。如果你绝对需要一个准确、独立的时间戳,那么你基本上被卡住了

(当然,您可以通过反复使用服务器时间并将其与您期望的时间进行比较来稍微改进这些方案-这有助于检测篡改或偶然漂移。但在某个时候,您会离线,从那时到下一次联机之间,您可以做的事情不多。)

您可以考虑两个选项:

  • 使用
    秒表
    ,它是为测量运行时间而设计的。在检索服务器时间时开始测量,然后您可以随时将运行时间添加到服务器时间中。但是,如果有人暂停机器,我不知道如果您暂停使用
    秒表
    ,会发生什么
  • 检索服务器时间时,请注意系统时钟的值(使用
    DateTime.UtcNow
    -此处不涉及本地时间),并比较两者以获得两个时钟之间的增量。您可以在任何时候应用增量来预测服务器时钟将显示的内容。此方法的注意事项:
    • 如果本地时钟运行缓慢或快速(或由Windows Time service之类的服务进行调整),则增量可能不正确
    • 如果用户调整系统本地时钟,您将遇到问题
基本上没有互联网连接,你唯一的时间来源就是本地系统。问题的严重程度取决于你担心什么样的故障模式——如果只是为了方便起见,笔记会有正确的时间,而你根本不需要担心
DateTime.UTCNow
getutcdate()