2013-03-22 5 views
3

У меня есть строка, которая отображает дату и время в следующем формате:Convert и время Строка DateTime в C#

Чт Янв 03 15:04:29 2013

Как бы преобразовать это DateTime ? Я пробовал:

string strDateStarted = "Thu Jan 03 15:04:29 2013" 
DateTime datDateStarted = Convert.ToDateTime(strDateStarted); 

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

+0

что-то вроде 'DateTime.ParseExact (ул, "ддд МММ дд чч: мм: сс гггг", NULL)' –

+0

[C# Дата Преобразовать в DateTime] (https://www.google.se/search?q = C% 23 + convert + date + to + datetime) – Default

ответ

3

Используйте следующий код:

string strDateStarted = "Thu Jan 03 15:04:29 2013";   
DateTime datDateStarted; 
DateTime.TryParseExact(strDateStarted, new string[] { "ddd MMM dd HH:mm:ss yyyy" }, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out datDateStarted); 
Console.WriteLine(datDateStarted); 

и уверен, что если время в формате 24 HRS, затем используйте HH. More details

+0

Это сработало отлично! – TroggleDorf

3

Попробуйте использовать DateTime.ParseExact.

в вашем случае format specified должно быть:

Thu Jan 03 15:04:29 2013 

и вызов должен выглядеть следующим образом:

DateTime logDate = DateTime.ParseExact(logValue, "ddd MMM dd HH:mm:ss yyyy", 
            CultureInfo.CreateSpecificCulture("en-US")); 

Третий параметр установлен в культуре США, так что ddd и MMM части , соответствуют Thu и Jan соответственно.


В этом случае я рекомендую ParseExact вместо TryParseExact, из источника данных. Если вы разбираете пользовательский ввод, всегда используйте TryParseExact, потому что вы не можете доверять, что пользователь выполнил запрошенный формат. Однако в этом случае источником является файл с четко определенным форматом, поэтому любые недопустимые данные следует рассматривать как исключение, потому что они являются, к тому же, исключительными.

Также обратите внимание, что методы *ParseExact очень неумолимы. Если данные точно не соответствуют указанному формату, это рассматривается как ошибка.

+0

Спасибо за ответ!Твой не совсем сработал, но предложение Аршада: 'DateTime.TryParseExact (strDateStarted, новая строка [] {" ddd MMM dd HH: mm: ss yyyy "}, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles .None, out datDateStarted); 'работал. – TroggleDorf

7

Используйте один из *Parse* методов, определенных на DateTime.

Либо TryParseExact, либо ParseExact, который примет строку формата, соответствующую строке даты.

Предлагаю ознакомиться с Custom Date and Time Format Strings.

В этом случае соответствующая строка формата будет:

"ddd MMM dd HH:mm:ss yyyy" 

Для использования:

DateTime.ParseExact("Thu Jan 03 15:04:29 2013", 
        "ddd MMM dd HH:mm:ss yyyy", 
        CultureInfo.InvariantCulture) 
+0

'hh' - 12-часовой формат –

+0

@lazyberezovsky - Да, спасибо. – Oded

0
string yourDateTimeRepresentation = "R"; //for example 
DateTime dt = DateTime.ParseExact(strDateStarted , yourDateTimeRepresentation , System.Globalization.CultureInfo.CurrentCulture);