DateTime比较和夏令时/其他怪异

Ron*_*dau 1 .net c# datetime dst

我有一个非常简单的日期需求,我需要能够比较2个文件的修改时间,我不需要任何其他信息,除了哪一个上次更新/它们是相同的.

我想知道在夏令时后,datetime COMPARISON(我不关心其他任何事情)会有什么反应.

让我们假设您在一段时间后更改文件X,然后在Y30分钟后再次更改文件(但时间实际上显示30分钟更早,因为日期由于节省而更改).

如果X&Y是2个日期时间,会发生什么?是X > YY > X?它是否比较显示的时间或滴答数?(我应该做的X > Y或者我应该比较X.TicksVS Y.Ticks?)

编辑:如果有人好奇,用例是我连续索引文件(多年),其中一些可能很少变化,我跳过任何不比我索引时更新的东西,所以如果我错过了一个,它可能是很久以前它再次改变并在索引中得到更新.

Mat*_*int 6

在.NET中,当你从一个文件中拉出的最后修改日期/时间,你可以使用的FileInfo,它有诸如性质LastWriteTimeLastWriteTimeUtc,或者你可以使用File,它具有类似的方法GetLastWriteTime()GetLastWriteTimeUtc().

使用这些的UTC形式,您根本不需要关心夏令时变化.

关于比较问题,您可以简单地进行比较X > Y.该DateTime结构将覆盖Equals基于ticks进行比较的方法.您可以在.NET Framework Reference Source中看到这一点.但是DateTime对象的刻度不一定基于UTC.该Kind物业也发挥作用.如果您正在使用DateTimeKind.Utc,那么您可以比较不考虑时区或夏令时的差异.

请记住,当操作系统从文件系统检索上次修改时间时,它会受到文件系统行为影响.当NTFS以UTC格式记录所有时间时,其他文件系统(如FAT和FAT32)以本地时间记录文件时间.这会影响您始终检索文件修改日期的能力.

所以,如果你在谈论NTFS卷上的文件时间,那么你没事.但是,如果你在谈论FAT32卷上的文件时间(可能来自USB拇指驱动器或相机的SD卡),那么你无法保证准确的转换.这是使用exFAT而不是FAT32格式化SD卡的一个很好的理由,因为exFAT包含时区偏移,允许准确转换回UTC.