Значение исключения в приложении C#: «Недопустимая дата OleAut»?

Кто-нибудь знает что это значит. Получение этого в приложениях C# winforms:

Not a legal OleAut date

Можете ли вы опубликовать код, вызывающий это?

Mitch Wheat 22.11.2008 18:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
18
1
44 728
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Это означает, что вы где-то указали недопустимую дату, пытаясь преобразовать в дату OLE Automation или из нее за пределами допустимого диапазона с 1 января 4713 года до н.э. до 31 декабря 9999 года нашей эры. Возможная причина в том, что это могло произойти из-за того, что даты OLE-автоматизации представлены как двойные.

Разве это не слишком очевидный ответ?

bugmagnet 22.11.2008 17:54

Это очевидный вопрос, я не знаю, как можно было бы быть более полезным, если OP не предоставит никаких подробностей.

Robert Gamble 22.11.2008 18:34

Согласовано. Мы не можем больше помочь без дополнительных деталей, таких как код.

lacop 22.11.2008 18:43

Другие боролись с этим. Предлагаю посмотреть эти темы на DotNetNuke и DevShed.

Ответ принят как подходящий

Это означает, что где-то в программе выполняется попытка преобразования в дату OLE-автоматизации или обратно за пределы допустимого диапазона с 1 января 4713 года до н.э. до 31 декабря 9999 года нашей эры. Это могло произойти, потому что даты автоматизации OLE представлены как двойной.

Начните с поиска возможных вариантов использования этих методов:

DateTime.FromOADate

DateTime.ToOADate

OADate представлен как двойное значение, значение которого представляет собой количество дней от полуночи 30 декабря 1899 г. (отрицательные значения представляют более ранние даты).

Это исключение возникает при попытке преобразовать значение, выходящее за пределы допустимого диапазона дат Ole Automation, в / из значения .NET DateTime (методы DateTime.FromOADate и DateTime.ToOADate, которые также неявно используются для COM-взаимодействия).

Я считаю, что для преобразования в OADate значение .NET DateTime должно быть строго больше 01/01/0100.

Чтобы преобразовать из OADate в значение .NET DateTime, значение типа double должно быть строго больше -657435 (= 01/01/0100) и строго меньше 2958466.0 (01/01/10000).

Я использовал:

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 одинарную кавычку. Это решило мою проблему. Надеюсь это поможет.

Другие вопросы по теме