我想找到一种将 DateTime 转换为 Int 的简单方法,其中01/01/1900
为 1(在 Excel 的 xmls 中使用)。
问问题
3657 次
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 回答