事情经过说明:
在做VSTO开发的时候,因为要将excel中的一栏的日期值转为数值并保存到数据库中。比如excel中是"2009/01/01",则转换为20090101并保存之。因为excel中日期实际是以日期序列值保存的,以"1900/01/01"作为1依次类推。所以写了下面的一个function作转换。        public static int XlsDateToNum(object xlsidx)
        {
            int intRtn = 0;
            try
            {
                int xlsdateidx = Convert.ToInt32(xlsidx) - 1;                DateTime dtt = new DateTime(1900, 1, 1).AddDays(xlsdateidx);                intRtn = int.Parse(dtt.ToString("yyyyMMdd"));            }
            catch (Exception)
            {
            }            return intRtn;        }结果发现DateTime.AddDays()算出的日期会比excel中算出的多一天。
比如差距天数为39814,DateTime(1900, 1, 1).AddDays(39814)得出的是:2009/1/3
而excel中算出来则是2009/1/2。谁能做一个解释呢?

解决方案 »

  1.   

    程序中当然是先多-1出来了。只是想在CSDN上求一甚解。
      

  2.   

    程序里的时间都是从0:0:0秒开始算的。
    是不是EXCLE是算当前时间呀?
    还有你加的天数太大了
    你就加1天看看效果。
      

  3.   

    加10天两边一样的话 只能说明EXCLE和程序对时间处理的方法不一样,39814多天可能某个闰月算法不一致。
      

  4.   

    难道是Excel当年为了避开千年虫干了什么隐藏的事情?
      

  5.   

    要是这样的话 可能是系统的问题了
    两位都用的什么操作系统呀?EXCLE都是什么版本?vs都是什么版本的?
      

  6.   


    13楼,你是用“Convert.ToInt32(39844)-1”做的测试,其实就是39843的间隔天数了。
    你这样测试一下:vs和excel中你都加上39844的间隔天数试试.vs中算出来是2009/2/2, 而excel中算出来是2009/2/115楼:我的操作系统XP: vs2008 + office2007