2008-11-22 8 views

Respuesta

18

Significa que en algún lugar del programa se intenta convertir hacia o desde una fecha de automatización OLE fuera del rango válido 1-enero-4713 aC hasta el 31 de diciembre de 9999 AD. Es posible que se haya salido porque las Fechas de automatización OLE se representan como double.

de inicio mediante la búsqueda de cualquier uso de los métodos:

DateTime.FromOADate

DateTime.ToOADate

0

Significa que ya ha proporcionado una fecha no válida en algún lugar, intentar convertir hacia o desde una fecha de Automatización OLE fuera del rango válido 1 de enero -4713 aC hasta el 31 de diciembre de 9999 AD. Una posible causa es que podría haberse resbalado porque las Fechas de automatización OLE están representadas como un doble.

+2

¿No es una respuesta demasiado obvia? – bugmagnet

+2

Es una pregunta obvia, no sé cómo podría ser más útil si el OP no proporciona ningún detalle. –

+0

De acuerdo. No podemos ayudar más sin más detalles como el código. – lacop

12

Un OADate se representa como un valor doble, cuyo valor es el número de días a partir de la medianoche el 30 de diciembre 1899 (valores negativos que representan fechas anteriores).

Esta excepción se produce al intentar convertir un valor que está fuera del rango válido de las fechas de Automatización Ole a/desde un valor .NET DateTime (métodos DateTime.FromOADate y DateTime.ToOADate - que también se utilizan implícitamente para COM Interop)

Creo que para ser válido para la conversión a un OADate, el valor .NET DateTime debe ser estrictamente mayor que 01/01/0100.

Para convertir de OADate a un valor .NET DateTime, el valor doble debe ser estrictamente mayor que -657435 (= 01/01/0100) y estrictamente menor que 2958466.0 (01/01/10000).

0

he utilizado:

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

para tratar con el mismo problema que estoy teniendo. Arroja la excepción cuando revisamos el año en mi caso. No hacer nada en una fecha no válida es exactamente el comportamiento que quiero, por lo que este truco funciona.

0

Lo que encontré fue que una columna con un gran row_id '257381195' intentaba ser leída por Excel como una Fecha. Lo que terminé haciendo fue alterar los datos de esa columna a una cadena precediendo al row_id con una comilla simple. Esto resolvió mi problema. Espero que esto ayude.

Cuestiones relacionadas