これが何を意味するのか誰か知っていますか。 C#winformsアプリケーションでこれを取得する:
法的なOleAutの日付ではありません
これは、プログラムのどこかでOLE自動化日付が有効な範囲外です。紀元前4713年1月1日から西暦9999年12月31日まで)に変換しようとしていることを意味します。 OLE自動化日付はdoubleとして表されるためです。
メソッドの使用法を探すことから始めます。
OADateは、1899年12月30日の午前0時からの日数を値とするdouble値として表されます(負の値はそれ以前の日付を表します)。
この例外は、Ole Automationの日付の有効範囲外の値を.NET DateTime値との間で変換しようとしたときにスローされます(メソッドDateTime.FromOADateおよびDateTime.ToOADate-これらはCOM相互運用機能にも暗黙的に使用されます)。
OADateへの変換には有効であると思います。NETDateTime値は01/01/0100より厳密に大きくする必要があります。
OADateから.NETDateTime値に変換するには、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) { }
私が抱えているのと同じ問題に対処するために。私の場合、年をチェックすると例外がスローされます。無効な日付に何もしないことは、まさに私が望む動作なので、このハックは機能します。
私が見つけたのは、row_idが「257381195」の大きな列がExcelによって日付として読み取られようとしていたことです。最終的に行ったのは、row_idの前に一重引用符を付けて、その列のデータを文字列に変更することでした。これで私の問題は解決しました。お役に立てれば。
これは、無効な日付をどこかに指定し、OLE自動化日付が有効な範囲外の自動化日付(紀元前1月1日から西暦4713年12月31日まで)に変換しようとしたことを意味します。考えられる原因は次のとおりです。 OLE Automation Datesはdoubleとして表されるため、すり抜けた可能性があります。