Ошибка при разборе datetime - PullRequest
       0

Ошибка при разборе datetime

3 голосов
/ 14 октября 2011

Я получаю следующее сообщение об ошибке в моей программе на C # в операторе:

dr["StartDate"] = Convert.ToDateTime(dr["business_dt"]).ToString("MM/dd/yyyy");

Я не получаю эту ошибку на своем компьютере в США. Но она выдает ошибку на компьютере пользователя, расположенном за пределами США.,Формат даты, возвращаемый из устройства чтения данных: 31.08.2010 12:00:00

System.FormatException: строка не была распознана как действительный DateTime.в System.DateTimeParse.Parse (строки String, DateTimeFormatInfo dtfi, стили DateTimeStyles) в System.Convert.ToDateTime (строковое значение, поставщик IFormatProvider) в System.String.System.IConvertible.ToDateTime (поставщик IFormatProviderT) (в System.Connect).Значение объекта)

Пожалуйста, сообщите.

Спасибо.

Ответы [ 4 ]

4 голосов
/ 14 октября 2011

Редактировать:

использовать 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;
3 голосов
/ 14 октября 2011

Проблема в том, что в некоторых странах месяц и дневная часть даты поворачиваются. В США это "ММ / ДД / ГГГГ", например, германия это "дд / мм / гггг".

Таким образом, вы должны указать, в каком формате находится ваша строка (в вашем случае это выглядит как формат США, поэтому я выбрал эту культуру):

DateTime date = Convert.ToDateTime(dr["business_dt"], new CultureInfo("en-US"));
dr["StartDate"] = date.ToString("MM/dd/yyyy");
0 голосов
/ 21 сентября 2016

У меня только что была связанная проблема в ASP.NET. Возникла проблема на ОДНОМ веб-сайте на веб-сервере, на котором выполнялись ДВЕ (почти идентичные) копии кода Я собирался ненадолго, потому что никакая логика не подходила под симптомы. Это оказалось проблемой с Web.Config. Отсутствующий сайт отсутствовал:

<globalization uiCulture="en" culture="en-AU" /> from the <system.web> section.

Думаю, я бы упомянул об этом на случай, если это кому-нибудь поможет.

0 голосов
/ 14 октября 2011

Это происходит потому, что стандартная культура машины говорит, что формат даты - «дд / мм / гггг», и в вашем случае месяц обозначается как «31», что неверно, поэтому он выдает ошибку.

Пожалуйста, установите культуру перед разбором даты и времени.

используйте этот код перед вашим кодом:

CultureInfo CultureInfo1 = (CultureInfo)CultureInfo.CurrentCulture.Clone();
CultureInfo1.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
Thread.CurrentThread.CurrentCulture = CultureInfo1;

Дайте мне знать, если это поможет.

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