从DateTime到Int? (1 = 01/01/1900,Excel)

时间:2012-10-13 10:38:03

标签: c# excel datetime

  

可能重复:
  How do I convert an Excel serial date number to a .NET DateTime?

我想找到一种简单的方法将DateTime转换为Int,其中01/01/1900为1(在Excel的xmls中使用)。

2 个答案:

答案 0 :(得分:1)

这是一个内置的转换:

int excelDays = (int)(yourDate.ToOADate());

注意0 1/1/1900,它是12/31/1899。由于Lotus 123程序员试图避免不得不处理闰年规则而采取的捷径。 1900年不是闰年。当Excel启动时,必须与Lotus兼容,每个人当时都使用Lotus 123。关于这个错误的好故事是由StackExchange首席执行官Joel Spolsky在blog post中写的。相关部分是“这是Excel中的错误!”我大声说道。

答案 1 :(得分:0)

以上是我在编写上述想法后的建议:

            private Nullable<int> ToInt1900ForExcel(DateTime DT)
    {
        if (DT.Ticks < 599266080000000000)//Below 1900-1-1, Excel has some problems representing dates, search it on the web.
            return null;
        if (DT.Ticks < 599317056000000000)//Excel reproduced a bug from Lotus for compatibility reasons, 29/02/1900 didn't actually exist.
            return (int)(DT.ToOADate()) - 1;
        return (int)(DT.ToOADate());
    }

或者如果你愿意(负值和零在Excel中不能正常工作)

           private int ToInt1900ForExcel(DateTime DT)
    {
        if (DT.Ticks < 599317056000000000)//Excel reproduced a bug from Lotus for compatibility reasons, 29/02/1900 didn't actually exist.
            return (int)(DT.ToOADate()) - 1;
        return (int)(DT.ToOADate());
    }