2008Server下相同DateTime值,比较时却神秘不等

这两天写代码时居然遇到一件非常奇怪的现象,我要判断一个dbf文件的上次修改日期,并与保存在数据库中的日期进行对比,如果更新,则进行数据同步,并将同步时的文件日期保存下来供下次判断。

我使用了这样的代码来判断

                string file=row["SourceTable"].ToString();
                FileInfo info = new FileInfo(file);
                DateTime sourceTime,fileTime;
                DateTime.TryParse(row["SourceMark"].ToString(), out sourceTime);
                if (info.LastWriteTime > sourceTime)
                {
                    //执行同步操作
                }
                else
                {
                    //....
                }

在XP下调试一切正常,可是在Windows 2008 Server下,总是不断的进行同步操作,if (info.LastWriteTime > sourceTime)语句一直判断为真,也就是数据库中保存的日期总是被判定为小于文件日期。

于是怀疑代码有问题,后来又怀疑数据库保存时没有正确保存,检查了两天,发现代码没有任何问题,而且在XP下一切正常。

在实在没有办法的情况下,只有改用日期差值来判断

TimeSpan span = fileTime - sourceTime;

结果一下就出来了,原来两个日期相差500多毫秒,难怪比较结果值不对。

估计C#在2008的系统下,得到的文件修改日期精确到毫秒,而XP下则只精确到秒,保存数据时数据库中DateTime类型也只精确到秒,所以在2008下就出现了错误的结果,而XP下一切正常。当然,也可能是NTFS文件系统与FAT32的不同,而非操作系统的原因,具体原因也没有再追究,解决问题就好。

结论:在进行日期比较时,一定要注意精度问题,最好用TimeSpan来进行判断,而不要用简单的==操作

你可能感兴趣的:(数据库,windows,server,String,File,XP)