我对日期时间有一个非常简单的需求,我需要能够比较2个文件的修改时间,我不需要任何其他信息,除了哪一个上次更新/它们是相同的。
我想知道在夏令时后,datetime COMPARISON(我不关心其他任何事情)会有什么反应。
让我们假设您在X
时间更改文件,然后在30分钟后再次在时间Y
更改文件(但时间实际上显示30分钟更早,因为由于节省而更改了日期)。
如果X
& Y
是2个日期时间,会发生什么?是X > Y
还是Y > X
?它是否比较显示的时间或滴答数? (我应该X > Y
还是应该X.Ticks
与Y.Ticks
进行比较?)
编辑:如果有人好奇,用例是我连续索引文件(多年),其中一些可能很少变化,我跳过的任何内容都不比索引时更新因此,如果我错过了一个,它可能需要很长时间再次更改并在索引中更新。
答案 0 :(得分:6)
在.Net中,当您从文件中提取上次修改日期/时间时,您可以使用FileInfo
class,其中包含LastWriteTime
和LastWriteTimeUtc
等属性,或者您可以使用File
class,其中包含GetLastWriteTime()
和GetLastWriteTimeUtc()
等方法。
使用这些的UTC形式,您根本不需要关注夏令时的变化。
关于比较问题,您只需比较X > Y
即可。 DateTime
结构覆盖基于tick的Equals
方法进行比较。您可以在.NET Framework Reference Source中看到这一点。但是DateTime
对象的刻度不一定基于UTC。 Kind
属性也发挥作用。如果您使用DateTimeKind.Utc
,那么您可以进行比较而不考虑时区或夏令时差异。
请记住,当操作系统从文件系统检索上次修改时间时,它会受到文件系统的行为的影响。当NTFS记录所有UTC时间时,其他文件系统(如FAT和FAT32)在本地时间中记录文件时间。这会影响您始终检索文件修改日期的能力。
因此,如果您在讨论NTFS卷上的文件时间,那么您没问题。但是,如果你在谈论FAT32卷上的文件时间(可能来自USB拇指驱动器或相机的SD卡),那么你无法保证准确的转换。这是使用exFAT而不是FAT32格式化SD卡的一个很好的理由,因为exFAT包含时区偏移,可以准确地转换回UTC。