Строка IIS не была распознана как действительный DateTime - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть проблема,

У меня есть строковая дата с этим форматом dd/MM/yyyy, а затем я преобразую ее в объект DateTime, используя Convert.ToDateTime(date), она прекрасно работает в VS, но когда я публикую ее в IIS, она всегдавыдает String was not recognized as a valid DateTime.

, но если изменить формат на MM/dd/yyyy, он нормально работает в IIS, но выдает ошибку, если запускает его через VS.

string date =  "19/9/2019"  //"dd/MM/yyyy";
DateTime dt = Convert.ToDateTime(date); //run fine via VS, error in IIS

string date = "09/19/2019" //"MM/dd/yyyy";
DateTime dt = Convert.ToDateTime(date); //run fine via IIS, error in VS

, пожалуйста, советуйте

Ответы [ 2 ]

3 голосов
/ 19 сентября 2019

Прежде всего, "09/19/yyyy" - это , а не - допустимая строка, которая может быть проанализирована до DateTime, и она также должна выдавать исключение в IIS.

Во-вторых, Convert.ToDateTime(string) перегрузка использует CurrentCulture настройки на вашей машине.Если ваши VS и IIS на разных машинах, проверьте их настройки CurrentCulture на обеих машинах.Я предполагаю, что они весьма различны, и один из них не имеет "dd/M/yyyy" в качестве стандартного формата даты.

С другой стороны, чтобы предотвратить этот вид операций разбора, вы можете использовать DateTime.ParseExactметод перегружает , и вы можете указать точный формат и правильную (использующую / в качестве DateSeparator) информацию о культуре.

Также следует помнить, что разница между Спецификаторы M и MM.Для однозначных номеров месяцев спецификатор MM будет генерировать номер месяца с начальным нулем (например, 09), но спецификатор M не будет.

string date =  "19/9/2019";
DateTime myDate = DateTime.ParseExact("dd/M/yyyy", date, CultureInfo.InvariantCulture); 

или

string date =  "19/09/2019";
DateTime myDate = DateTime.ParseExact("dd/MM/yyyy", date, CultureInfo.InvariantCulture); 
1 голос
/ 19 сентября 2019

Вы получаете ошибку только потому, что культура по умолчанию на стороне сервера отличается от сайта разработки.

Вы должны либо использовать DateTime.TryParseExact, либо использовать DateTime.TryParse, указав соответствующий CultureInfo.(Например, культура пользователя.)

Вы должны применить соответствующий CultureInfo к ToString - возможно CultureInfo.InvariantCulture.

Пример:

var varDate = DateTime.ParseExact(txtDate.Text, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture);
DateTime dt3 = Convert.ToDateTime(varDate);
...