-1

可能重复:
如何将 Excel 序列日期号转换为 .NET DateTime?

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

4

2 回答 2

1

这是一个内置的转换:

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

请注意,0不是1/1/1900,而是 12/31/1899。由于试图避免处理闰年规则的 Lotus 123 程序员采取的捷径,这很糟糕。1900 年不是闰年。必须与 Lotus 兼容是 Excel 开始时的要求,当时每个人都使用 Lotus 123。StackExchange 的 CEO Joel Spolsky 在这篇文中写了一篇关于这个 bug 的精彩战争故事。相关部分是“这是 Excel 中的一个错误!” 我惊呼。

于 2012-10-13T10:43:29.753 回答
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());
    }
于 2012-10-13T12:00:06.060 回答