C#app中exception的含义:“不是合法的OleAut日期”?

有谁知道这意味着什么。 在C#winforms应用程序中获取此信息:

不是合法的OleAut日期

这意味着程序中的某个位置正在尝试在公元前1月1日至4月13日至公元9月31日至9999年之间的有效范围之外转换为OLE自动化日期。 它可能已经滑落,因为OLE自动化日期表示为双精度数

首先寻找方法的任何用途:

DateTime.FromOADate

DateTime.ToOADate

OADate表示为双值,其值是1899年12月30日午夜的天数(负值表示较早的日期)。

尝试将Ole Automation日期的有效范围之外的值转换为.NET DateTime值时(方法DateTime.FromOADate和DateTime.ToOADate – 它们也隐式用于COM Interop),抛出此exception。

我认为有效转换为OADate .NET DateTime值必须严格大于01/01/0100。

要从OADate转换为.NET DateTime值,double值必须严格大于-657435(= 01/01/0100)且严格小于2958466.0(01/01/10000)。

其他人则为此付出了努力。 我建议在DotNetNuke和DevShed上查看这些主题。

我用过:

try { if (folderItem.ModifyDate.Year != 1899) { this.FileModifiedDate = folderItem.ModifyDate.ToShortDateString() + " " + folderItem.ModifyDate.ToLongTimeString(); } } //we need this because it throws an exception if it's an invalid date... catch (ArgumentException) { } 

处理我遇到的同样问题。 当我们在我的案例中检查年份时,它会引发exception。 在无效日期什么都不做就是我想要的行为,所以这个hack有效。

我发现有一个大row_id’257381195’的列试图被Excel读取为Date。 我最终做的是通过在row_id前加一个引号将该列的数据更改为字符串。 这解决了我的问题。 希望这可以帮助。

这意味着您在某处提供了无效日期,尝试转换为OLE自动化日期或从OLE自动化日期转换到公元前1月1日至4月13日到公元9月31日至9月9日的有效范围之外。 可能的原因是它可能已经滑过,因为OLE自动化日期表示为double。