可能重复:
How do I convert an Excel serial date number to a .NET DateTime?
我想找到一种简单的方法将DateTime转换为Int,其中01/01/1900
为1(在Excel的xmls中使用)。
答案 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());
}