#c# #datetime
#c# #дата и время
Вопрос:
Я получаю следующее сообщение об ошибке в моей программе на C # в инструкции:
dr["StartDate"] = Convert.ToDateTime(dr["business_dt"]).ToString("MM/dd/yyyy");
Я не получаю эту ошибку на своей машине в США.Но он выдает ошибку на компьютере пользователя, расположенном за пределами США.
Формат даты, возвращаемый из datareader: 31.08.2010 12:00:00
Система.FormatException: строка не была распознана как допустимая дата и время. в системе.DateTimeParse.Выполните синтаксический анализ (String s, DateTimeFormatInfo dtfi, стили DateTimeStyles) в системе.Преобразовать.ToDateTime(строковое значение, поставщик IFormatProvider) в системе.Строка.Система.Значок конвертируемый.Текущее время (поставщик IFormatProvider) в системе.Преобразовать.Текущее время (значение объекта)
Пожалуйста, сообщите.
Спасибо.
Комментарии:
1. Почему ваш DataRow в любом случае содержит строки вместо значений DateTime?
Ответ №1:
Редактировать:
использовать DateTime.ParseExact
метод:
var dateString = dr["business_dt"].ToString();
var format = "MM/dd/yyyy hh:mm:ss tt";
var dateTime = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
dr["StartDate"] = dateTime;
Комментарии:
1. Я попробовал, и это не сработало: ИМХО, вы должны использовать
var format = "MM/dd/yyyy hh:mm:ss tt"
2. @Davide,@Marco, у меня это не сработало. По-прежнему выдается ошибка: «входная строка была не в правильном формате». Я тоже попробовал это, и оно выдает ту же ошибку: DateTime. ParseExact(DateTime.Now.toString(), «ММ / дд / гггг чч: мм: ss tt», CultureInfo. Инвариантная культура); Спасибо.
3. да, используйте пример в моем ответе, а не этот ваш код из комментария выше, он отличается…
4. Нет, Давиде, ты отредактировал не ту часть, я думаю: ты должен сделать
var dateString = dr["business_dt"].ToString(); var format = "MM/dd/yyyy hh:mm:ss tt";
, а затем оставшуюся часть кода!!5. Предполагается, что dr[«business_dt»] имеет тип DateTime . Я думаю, что это строка типа.
Ответ №2:
Проблема в том, что в нескольких странах месяц и дневная часть даты перевернуты. В США это «ММ / дд / гггг», например, в Германии это «дд / мм / гггг».
Итак, вам нужно указать, в каком формате находится ваша строка (в вашем случае это похоже на формат США, поэтому я выбрал эту культуру):
DateTime date = Convert.ToDateTime(dr["business_dt"], new CultureInfo("en-US"));
dr["StartDate"] = date.ToString("MM/dd/yyyy");
Комментарии:
1. Пожалуйста, оставьте комментарий при голосовании против.
Ответ №3:
Это происходит потому, что язык компьютера по умолчанию говорит, что формат даты «дд / ММ / гггг», а в вашем случае месяц указывается как «31», что неверно, поэтому он выдает ошибку.
Пожалуйста, установите культуру перед анализом даты и времени.
используйте этот код перед вашим кодом:
CultureInfo CultureInfo1 = (CultureInfo)CultureInfo.CurrentCulture.Clone();
CultureInfo1.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
Thread.CurrentThread.CurrentCulture = CultureInfo1;
дайте мне знать, если это поможет.
Ответ №4:
У меня только что возникла связанная с этим проблема в ASP.NET . Проблема возникла на ОДНОМ веб-сайте на веб-сервере, на котором запущены ДВЕ (почти идентичные) копии кода. Какое-то время я собирался, так как никакая логика, казалось, не соответствовала симптомам. Оказалось, что это проблема с Web.Config. Сбойный сайт отсутствовал:
<globalization uiCulture="en" culture="en-AU" /> from the <system.web> section.
Подумал, что я просто упомяну об этом на случай, если это кому-нибудь поможет.