web-dev-qa-db-ja.com

C#アプリでの例外の意味:「合法的なOleAut日付ではありません」?

これが何を意味するのか誰か知っていますか。 C#winformsアプリケーションでこれを取得する:

法的なOleAutの日付ではありません

17
leora

これは、プログラムのどこかでOLE自動化日付が有効な範囲外です。紀元前4713年1月1日から西暦9999年12月31日まで)に変換しようとしていることを意味します。 OLE自動化日付はdoubleとして表されるためです。

メソッドの使用法を探すことから始めます。

DateTime.FromOADate

DateTime.ToOADate

22
xyz

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)より厳密に小さい必要があります。

14
Joe

他の人はこれに苦労しています。 DotNetNuke および DevShed でこれらのスレッドを確認することをお勧めします。

0
bugmagnet

私が使用した:

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) { } 

私が抱えているのと同じ問題に対処するために。私の場合、年をチェックすると例外がスローされます。無効な日付に何もしないことは、まさに私が望む動作なので、このハックは機能します。

0
lc.

私が見つけたのは、row_idが「257381195」の大きな列がExcelによって日付として読み取られようとしていたことです。最終的に行ったのは、row_idの前に一重引用符を付けて、その列のデータを文字列に変更することでした。これで私の問題は解決しました。お役に立てれば。

0
warren caulton

これは、無効な日付をどこかに指定し、OLE自動化日付が有効な範囲外の自動化日付(紀元前1月1日から西暦4713年12月31日まで)に変換しようとしたことを意味します。考えられる原因は次のとおりです。 OLE Automation Datesはdoubleとして表されるため、すり抜けた可能性があります。

0
Robert Gamble