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来进行判断,而不要用简单的==操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值