DateTime.ParseExact: Строка не была распознана как действительный DateTime - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь получить дату (& datetime) из URL, а затем преобразовать ее в соответствующий формат перед сохранением в БД.

var reqDate = Request.QueryString["StartDate"];

//at this point I have reqDate: 05/15/2018 00:00:00
reqDate = reqDate.Substring(0, reqDate.IndexOf(" ") + 1);

//after stripping off the time part I have: 05/15/2018 
timingRequest.ReqDate = DateTime.ParseExact(reqDate, "MM/dd/yyyy", CultureInfo.InvariantCulture);

//but this throws the exception

URL:

enter image description here

То же самое имеет место с startDateTime

var reqDateTime = Request.QueryString["startDateTime"];
 timingRequest.IgnoreEntry = DateTime.ParseExact(reqDateTime, "dd/MM/yyyy  hh:mm tt", CultureInfo.InvariantCulture);

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Первый пример исправления:

var reqDate = Request.QueryString["StartDate"];
reqDate = reqDate.Substring(0, reqDate.IndexOf(" "));

timingRequest.ReqDate = DateTime.ParseExact(reqDate, "MM/dd/yyyy", CultureInfo.InvariantCulture);

Второй пример исправления:

var reqDateTime = Request.QueryString["startDateTime"];
 timingRequest.IgnoreEntry = DateTime.ParseExact(reqDateTime, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
0 голосов
/ 17 мая 2018

В вашем первом сценарии нет необходимости добавлять +1 после прочтения indexOf(" "). +1 добавление дополнительного места к дате

//Lets take date in string is "05/15/2018 00:00:00"
Console.WriteLine(s.Substring(0, reqDate.IndexOf(" ")+1)); /*This will print "05/15/2018 " WITH EXTRA SPACE*/

Правильный путь s.Substring(0, s.IndexOf(" "))

Во втором сценарии используйте формат даты, например HH:mm:ss вместо HH:mm tt

//Here use "hh:mm:ss" instead of "hh:mm tt"
DateTime dateTime = DateTime.ParseExact(reqDateTime, "dd/MM/yyyy  hh:mm:ss", CultureInfo.InvariantCulture);

Элегантный подход будет:

@ Credit Stephen Muecke

После просмотра вашего URL вы можете написать метод с параметрами, такими как

public ActionResult Create(int empId, int attID, DateTime startDate, DateTime startDateTime)
{
 /*Do your work here, DefaultModelBinder will take care of parameters*/
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...