проблема при преобразовании объекта в datetime в c # - PullRequest
1 голос
/ 25 мая 2010

Я получаю строковое значение в объекте, скажем, "28/05/2010".Когда я конвертирую его в DateTime, он генерирует исключение как:

Строка не была распознана как действительный DateTime.

Код:

object obj = ((Excel.Range)worksheet.Cells[iRowindex, colIndex_q17]).Value2;
Type type = obj.GetType();
string strDate3 = string.Empty;
double dbl = 0.0;

if (type == typeof(System.Double))
{
    dbl = Convert.ToDouble(((Excel.Range)worksheet.Cells[iRowindex, colIndex_q17]).Value2);
    strDate3 = DateTime.FromOADate(dbl).ToShortDateString();
}
else
{
    DateTime dt = new DateTime().Date;
    //////////dt = DateTime.Parse(Convert.ToString(obj));
    **dt = Convert.ToDateTime(obj).Date;**
    strDate3 = dt.ToShortDateString(); 
}

ДвойнойЗвездочка "**" получает исключение.

Ответы [ 2 ]

1 голос
/ 25 мая 2010

Причиной вашего исключения является то, что у вас есть другая культура, настроенная для сервера SQL и вашего приложения.Итак, вы получаете строку из базы данных как «dd / MM / yyyy», и в вашем приложении это значение анализируется как «MM / dd / yyyy».28 недействительный месяц, поэтому он создает исключение.Используйте DateTime.ParseExact(dateString, "dd/MM/yyyy", CultureInfo.InvariantCulture);, чтобы получить правильное значение, или используйте ту же культуру.

ОБНОВЛЕНИЕ: Вы можете проверить настройки окон из Панели управления -> Регион и язык.Для настроек SQL Server культуры и того, как вы можете определить культуру для вашего приложения, вот хорошее объяснение http://alainrivas.blogspot.com/2008/09/aspnet-and-sql-server-globalization.html

1 голос
/ 25 мая 2010

Используйте DateTime.ParseExact и укажите строку формата как дд / мм / гггг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...