这可能是一个愚蠢的问题,但我似乎无法弄明白.我正在比较两个文件的LastWriteTime,但是它总是失败,因为我从网上下载的文件总是将毫秒设置为0,而我的原始文件有一个实际值.在比较时是否有一种忽略毫秒的简单方法?
这是我的功能:
//compare file's dates
public bool CompareByModifiedDate(string strOrigFile, string strDownloadedFile)
{
DateTime dtOrig = File.GetLastWriteTime(strOrigFile);
DateTime dtNew = File.GetLastWriteTime(strDownloadedFile);
if (dtOrig == dtNew)
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
默认情况下,C#将DateTime对象与100ns刻度进行比较.但是,我的数据库将DateTime值返回到最接近的毫秒.使用指定的容差比较C#中两个DateTime对象的最佳方法是什么?
编辑:我正在处理截断问题,而不是舍入问题.正如Joe在下面指出的那样,舍入问题将引入新的问题.
适合我的解决方案是以下组合.
(dateTime1 - dateTime2).Duration() < TimeSpan.FromMilliseconds(1)
Run Code Online (Sandbox Code Playgroud)
如果差异小于1毫秒,则返回true.对Duration()的调用很重要,以获得两个日期之间差异的绝对值.
我正在进行DateTime比较,但我不想在秒,毫秒和刻度级别进行比较.什么是最优雅的方式?
如果我只是比较DateTime,那么由于滴答差异,它们很少相等.
我需要在两个单独的列表中比较日期.每个列表都由MyFile对象构成.这是我创建的一个类,用于获取有关文件的特定信息,例如name,dateModified,extension等.唯一的问题是我的第二个列表中的很多MyFiles对象(从外部硬盘驱动器获取)没有将dateTime标记(LastWriteTime)保留到毫秒.我相信这就是为什么我的比较不起作用的原因.例如,这里是我的比较失败的一个例子:"为什么c#认为日期不相等?"

a和b是MyFile对象,MyFile类包含一个属性ticks,它等于file.LastWriteTime.Ticks它们没有在我刚刚包含它们的程序中用于调试目的.因此,经过多次调试后,我意识到最后7位代表文件的毫秒数.因此,我在MyFile中的ticks属性现在包含11个有效数字而不是18个(注意18-11 = 7).这个问题是,当我比较滴答时,当我尝试通过除以10000000然后多打10000000来更新ticks属性时,我得到奇怪的结果.因为我的ticks propery是一个long int,它将丢失最后7位数当我划分.我得到的'错误'更少.但是有一些其他时候我得到这样的东西:

在这里我们可以看到日期至少相同,直到第二个.为什么c#认为它不是同一个日期?我是否必须创建自己的"Ticks"功能?我知道我将dateTime转换为字符串然后比较它但我想知道一个对象a.dateModified是否比对象b.dateModified更新的可能性