C# 比较两台机器上的日期时间刻度

C# 比较两台机器上的日期时间刻度,c#,.net,datetime,compare,C#,.net,Datetime,Compare,比较两台不同计算机上两个文件的FileInfo.CreationTimeUtc.Ticks以查看哪个版本更新是可行的选择,还是有更好的方法 滴答声是否取决于操作系统时间,还是它们实际上是来自过去某个固定日期的物理滴答声?UTC时间的目的是使其具有通用性,但两台计算机都必须具有同步时钟,以便只比较滴答声。例如,如果我们的两台计算机在完全相同的时间更新了一个文件(撇开相对论不谈),它们仍然可以记录不同的时间——这不像计算机倾向于内置原子钟 当然,它们可以与NTP等同步时间,使彼此非常接近。如果没有更

比较两台不同计算机上两个文件的
FileInfo.CreationTimeUtc.Ticks
以查看哪个版本更新是可行的选择,还是有更好的方法

滴答声是否取决于操作系统时间,还是它们实际上是来自过去某个固定日期的物理滴答声?

UTC时间的目的是使其具有通用性,但两台计算机都必须具有同步时钟,以便只比较滴答声。例如,如果我们的两台计算机在完全相同的时间更新了一个文件(撇开相对论不谈),它们仍然可以记录不同的时间——这不像计算机倾向于内置原子钟


当然,它们可以与NTP等同步时间,使彼此非常接近。如果没有更多的信息,很难说这是否适合你的使用。您还应该记住,用户可能会故意弄乱系统时钟,这会不会给您的用例带来问题?

如果您谈论的是任意文件,那么关于UTC的答案值得一试。时钟应该是一样的

如果您可以控制文件和写入它们的机器,我会在文件的开头写一个版本号。然后您可以比较版本号。如果两台机器独立地编写一个文件,您必须研究如何获得唯一的版本号。为了解决这个问题,可以实现两台机器都使用的版本webservice


某些文件格式具有内置的版本信息和时间戳。例如,Microsoft Office格式。然后,您可以使用内部信息来决定哪一个是最新的。但是,在这些问题上,最终可能会出现版本冲突。

从您对问题的措辞来看,我认为出于某种原因,您无法调用DateTime比较方法。假设这样,ticks属性的msdn页面会声明“一个tick表示一百纳秒或一千万分之一秒。一毫秒内有10000个tick。”因此,tick指的是.NET库分配的值,不依赖于机器/操作系统(因为您使用的是C#,所以ehich可能是Windows)并且可以安全地用于比较

滴答声是否取决于操作系统时间 真正的物理滴答声来自一些固定的 过去的日期

滴答声几乎与操作系统无关。 如果我没记错的话,1秒=10000000个滴答声

因此,无论您在什么时候检查,您从
滴答声
中得到的大约是从
总秒数
中得到的一千万倍。(尽管它显然比
总秒数
更准确。)
刻度基本上是可以从.NET中测量的最小时间单位

说到UTC,是的,它是你能得到的最好的。如果运行应用程序的计算机上的系统时间足够准确,则您可以毫无问题地使用它进行管理

基本上,文件更新的频率越高,这就越不准确。如果有人在一秒钟内创建了两个版本的文件,则必须精确同步所有系统时间以获得良好的结果。

如果你每几分钟才有一次不同的版本,那么它对你来说就足够了。

简单的回答是,不,这不是一个可行的解决方案,至少在理论上不是,任何事情都可能发生

一台计算机的时钟可能精确到十亿分之一秒,但问题不在于精度,而在于两台计算机的时钟是否同步

这是一个实验。看看你的手表,然后随便问你周围的陌生人几点了。如果您在查看手表时在计算机上写入了您的文件,并在1秒前在您询问的人的计算机上写入了您的文件,您的比较是否会确定您的文件或他/她的文件较新

现在,您的解决方案可能会起作用,假设:

  • 您不必比较毫秒或纳秒不同的时钟值
  • 所讨论的计算机的时钟是根据一些公共源同步的 **或者至少设置为在不准确标准允许的情况下彼此尽可能接近

根据您的要求,我会认真考虑尝试找到一种不同的方法来确保您获得正确的值。

除了这个答案,我还想指出Eric Lippert关于日期时间和系统时钟的精确性和准确性的博客文章。请注意,即使是同步时钟也会在几秒钟内关闭。