2014-02-18 3 views
5

Im делает сообщение из представления и получает его в actionresult как строку. Значение я получаю:Как я могу преобразовать эту строку на сегодняшний день?

Вт 18 февраля 2014 00:00:00 GMT-0300 (Hora Oficial ду Бразил)

Использование DateTime.Parse бросает исключение:

Строка не был признан действительным DateTime.

Что делает эту строку недействительной и как ее можно преобразовать в DateTime?

ответ

8

DateTime.Parse исключает эту строку, поскольку она не имеет формата даты и времени .

Если ваш GMT-0300 (Hora oficial do Brasil) находится в строке стабильной, вы можете использовать;

var s = "Tue Feb 18 2014 00:00:00 GMT-0300 (Hora oficial do Brasil)"; 
var date = DateTime.ParseExact(s, 
           "ddd MMM dd yyyy HH:mm:ss 'GMT'K '(Hora oficial do Brasil)'", 
           CultureInfo.InvariantCulture); 
Console.WriteLine(date); 

Выход будет;

2/18/2014 12:00:00 AM 

Адрес demonstration.

Я не думаю, что есть способ проанализировать вашу часть (Hora oficial do Brasil), за исключением использования разделителя строк.

Взгляните;

Я не знаю, почему K спецификатор не работает на Ideone на самом деле. Я должен поставить часть -0300 также как разделитель строк для генерации примера. Это может быть проблема с DateTimeKind enumeration, но я не уверен.

+0

Да, проблема, что им получать эту дату контроллера DevExpress и этот контроллер Не позволяйте мне форматировать дату. – gog

+0

И если GMT-0300 (Hora oficial do Brasil) нестабилен? Что ты предлагаешь? – gog

+0

@ggui К сожалению, если ваша строка нестабильна, это может быть не решение. Существуют ограниченные пользовательские строковые форматы, посмотрите MSDN ['Пользовательские строки даты и времени»] (http://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29. ASPX) –

0

Строка недействительна из-за 'GMT' и '(Hora oficial do Brasil)' частей. Проще говоря: синтаксический анализатор не может определить, что является частью даты, а что нет.

С помощью форматированных строк вы сможете разобрать строку в формате DateTime.

см: MSDN: Custom Date and Time Format Strings

в вашем случае этот формат строки будет работать: "ddd MMM dd yyyy hh:mm:ss 'GMT'K '(Hora oficial do Brasil)'".

Вы можете использовать его как это:

string input = "Tue Feb 18 2014 00:00:00 GMT-0300 (Hora official do Brasil)"; 
string[] format = { "ddd MMM dd yyyy hh:mm:ss 'GMT'K '(Hora official do Brasil)'" }; 

DateTime date; 
if (DateTime.TryParseExact(input, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) 
    { 
     //Yepee the input was parsed correct 
    } 
    else 
    { 
     //system was unable to parse the string 
    } 

Или как это, если обработка ошибок не Обязательное:

string input = "Tue Feb 18 2014 00:00:00 GMT-0300 (Hora official do Brasil)"; 
string format = "ddd MMM dd yyyy hh:mm:ss 'GMT'K '(Hora official do Brasil)'"; 

DateTime date = DateTime.ParseExact(input, format, CultureInfo.InvariantCulture); 
Смежные вопросы