2013-06-21 7 views
0

я получаю даты в следующих форматах:дата Преобразовать в строку в DateTime C#

07 December, 2012 
7 December, 2012 
December 07, 2012 
12/07/2012 
12/7/2012 

в строковой переменной, из которой я должен определить дату, месяц, год. Дата может быть строкой в ​​любом из вышеуказанных форматов. Мне было интересно, должен ли быть код, который может обрабатывать все возможности даты как строковый тип данных. Я имею в виду, что хочу передать дату как строку и получить объект DateTime.

ответ

2

Я не уверен, что DateTime.TryParse() обрабатывает их все правильно, но это было бы первое, что я попробовал.

См http://msdn.microsoft.com/en-us/library/ch92fbc1.aspx

+0

или DateTime.TryParseExact() –

+0

Thanks DateTime.TryParse() работает хорошо. –

+0

Это не сработает для каких-либо культур. Кроме того, если бы вопрос состоял в том, чтобы убедиться, что данные строки могут быть проанализированы в DateTime. 'TryParse' не может гарантировать, что он может только гарантировать, что исключение не будет создано. Кроме того, «TryParseExact» будет лучше, поскольку он позволяет использовать строку пользовательского формата. –

5

Да, используйте DateTime.ParseExact со всеми возможными разрешенными форматами:

var strings = new[] { "07 December, 2012", "7 December, 2012", "December 07, 2012", "December 07, 2012", "12/07/2012", "12/7/2012" }; 
var formats = new[]{"dd MMMM, yyyy", "d MMMM, yyyy", "MMMM dd, yyyy", "dd/MM/yyyy", "dd/M/yyyy"}; 
var dates = strings 
    .Select(s => DateTime.ParseExact(s, formats, CultureInfo.InvariantCulture, DateTimeStyles.None)); 
foreach(DateTime d in dates) 
    Console.WriteLine("Year:{0} Month:{1} Day:{2}", d.Year , d.Month , d.Day); 

Demo

Я использовал CultureInfo.InvariantCulture для обеспечения соблюдения разделителя даты /, который обычно дата-разделитель вашей текущей культуры (см. The "/" Custom Format Specifier).