比较两台机器上的DateTime滴答

时间:2010-06-12 17:23:50

标签: c# .net datetime compare

比较两台不同计算机上的两个FileInfo.CreationTimeUtc.Ticks两个文件是否可行,以查看哪个版本更新 - 或者有更好的方法吗?

Ticks是否取决于操作系统时间,或者它们是否真的是过去某个固定日期的物理标记?

5 个答案:

答案 0 :(得分:1)

UTC时间的目标是它将是通用的 - 但是两台计算机必须具有同步时钟才能恰好比较刻度。例如,如果我们的计算机在同一时刻更新了一个文件(除了相对性),它们仍然可以记录不同的时间 - 它不像计算机往往带有内置的原子钟。

当然,他们可以将时间与NTP等同步,以便非常接近。如果没有更多信息,这对你的用途是否足够好是很难说的。您还应该记住用户故意搞乱他们的系统时钟的可能性 - 这是否会导致您的用例出现问题?

答案 1 :(得分:1)

  

Ticks取决于操作系统时间还是它们   一些固定的物理滴答声   过去约会?

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

因此,无论您何时检查,您从Ticks获得的内容大约是TotalSeconds获得的内容的一千万倍。 (虽然它比TotalSeconds更准确,但显然。)
刻度基本上是您可以从.NET测量的最小时间单位。

至于谈论UTC,是的,它是你能得到的最好的。如果您的应用程序运行的计算机上的系统时间足够准确,那么您将毫无问题地管理它。

基本上,文件的更新频率越高,这就越不准确。如果有人在一秒钟内创建了两个版本的文件,则必须精确同步所有系统时间才能获得良好的结果 如果你每隔几分钟只有不同的版本一次,那么它对你来说非常好。

答案 2 :(得分:1)

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

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

这是一个实验。看看你的手表,然后问你周围的随机陌生人是什么时候。如果您在查看手表时将文件写入计算机,并在1秒钟之前写入属于您所询问的人的计算机上,那么您的比较是否会确定您的文件或他/她的文件是否更新? / p>

现在,您的解决方案可能会有效,假设:

  • 您无需比较毫秒或毫秒秒的不同时钟值
  • 有问题的计算机的时钟与某些常见来源同步 **或至少设置为您的不准确标准允许
  • 彼此接近

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

答案 3 :(得分:0)

如果您正在谈论任意文件,那么有关UTC的答案值得一试。时钟应该是相同的。

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

某些文件格式内置了版本信息,还有时间戳。例如,Microsoft Office格式。然后,您可以使用内部信息来确定哪个是最新的。但是你最终也可能会遇到版本冲突。

答案 4 :(得分:0)

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