Faris Karcic Ответов: 2

Преобразование строки в datetime


Поэтому у меня возникли проблемы с преобразованием строки в DateTime. формат строки таков

Jun 23 2017  4:46PM


Поэтому я должен преобразовать его в DateTime, чтобы я мог сравнить его с
DateTime.Now



Заранее спасибо!

Что я уже пробовал:

Взять один:

var myDate = DateTime.ParseExact(viewModel.start, "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);


Принимать по две:
var date = DateTime.Parse(viewModel.start)


Оба дали мне:
System.FormatException: 'String was not recognized as a valid DateTime.'


Подробный:
System.FormatException occurred
  HResult=0x80131537
  Message=String was not recognized as a valid DateTime.
  Source=mscorlib
  StackTrace:
   at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   at System.DateTime.Parse(String s)
   at SmartAgro.Controllers.DashboardController.PostEvent(CalendarEventViewModel viewModel) in C:\Users\Faris\Documents\Visual Studio 2017\Projects\SmartAgro\SmartAgro\Controllers\DashboardController.cs:line 363
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()

Tomas Takac

Попробуйте этот формат: "МММ ДД гггг ч:ммтт"
Но дополнительное пространство там, кажется, вызывает проблемы.

2 Ответов

Рейтинг:
13

F-ES Sitecore

Как "Jun 23 2017 4: 46PM" приравнивается к "MM/dd/yyyy hh:mm:ss tt"? Вы говорите .net, что дата выглядит как "23.06.2017 04:46:00 вечера", но вы даете ей "23 июня 2017 4: 46 вечера" для разбора. Формат, который вы даете, должен соответствовать вашей строке даты именно так, ключ находится в имени метода :)

var myDate = DateTime.ParseExact("Jun 23 2017  4:46PM", "MMM dd yyyy  h:mmtt", CultureInfo.InvariantCulture);


Обратите внимание, что я обслуживал двойное пространство между годом и временем, я не знаю, было ли это ошибкой копирования\вставки, если это пространство не существует в реальности, то удалите его также из строки формата

var myDate = DateTime.ParseExact("Jun 23 2017 4:46PM", "MMM dd yyyy h:mmtt", CultureInfo.InvariantCulture);


Thanks7872

Сразу к делу. +5

Faris Karcic

Да, именно так! Ошибка новичков.....
Однако мне пришлось сделать некоторые изменения, потому что я заметил, что на отладчике он изменил формат, так что модификация должна была быть сделана.

Большое спасибо! Цените это!

F-ES Sitecore

Если вы говорите о том, как выглядит переменная myDate в отладчике, то это потому, что даты не имеют формата, они просто представляют собой представление момента времени. Когда вы показываете переменную, наведя на нее курсор мыши или выполнив отладку.Write (myDate) затем, чтобы показать его на экране, он должен быть преобразован в строку, поэтому он вызывает myDate.ToString, который преобразует дату в строку на основе произвольного формата, как правило, то, что определено в ваших региональных настройках ОС.

Рейтинг:
12

Thanks7872

Решение, опубликованное выше, в значительной степени ясно для того, чтобы преодолеть эту проблему. Кроме того, я бы посоветовал вам обратиться Пользовательские строки формата даты и времени | Microsoft Docs[^] чтобы получить представление о том, как работать с такими проблемами.