2013-09-01 5 views
3

в моем коде я могу получить 2 типа строки, которая представляет DATETIME:Как преобразовать строку «MM-DDTHH: mm» в DateTime в C#?

1. "2013-09-05T15:55"

2. "09-05T19:10"

Как я конвертировать его действительным DateTime?

я попытался следующий код, но он бросает исключение для второго формата:

String departureDateStr = "09-05T19:10"; 
DateTime dt = Convert.ToDateTime(departureDateStr); 

Как преобразовать второй тип строки для действительного DateTime? Мне нужно какое-то строковое манипулирование?

ТНХ,

Amir

+0

В чем смысл '09-05T19: 10'? Я имею в виду, вы могли бы преобразовать его в день, месяц, год, час, ...? –

ответ

2

Используйте DateTime.ParseExact метод с custom datetime format string:

string departureDateStr = "09-05T19:10"; 
string departureDateStr2 = "2013-09-05T19:10"; 

var dt = DateTime.ParseExact(departureDateStr, "MM-ddTHH:mm", System.Globalization.CultureInfo.InvariantCulture); 
var dt2 = DateTime.ParseExact(departureDateStr2, "yyyy-MM-ddTHH:mm", System.Globalization.CultureInfo.InvariantCulture); 

или универсальный вызов для обоих форматов:

var dt = DateTime.ParseExact(departureDateStr, new[] { "MM-ddTHH:mm", "yyyy-MM-ddTHH:mm" }, System.Globalization.CultureInfo.InvariantCulture); 
1

Вы можете использовать DatetIme.ParseExact() метод для этого. Он преобразует указанное строковое представление даты и времени в эквивалент DateTime с использованием указанного формата и информации о формате для конкретной культуры. Формат строкового представления должен точно соответствовать указанному формату.

String departureDateStr = "09-05T19:10"; 
IFormatProvider provider = System.Globalization.CultureInfo.InvariantCulture; 
string format = "MM-ddTHH:mm"; 
DateTime parsedDate = DateTime.ParseExact(departureDateStr, format, provider); 

Если вам нужно это преобразование много раз, то вы можете даже сделать его метод расширения, как показано ниже:

public static class StringExtensions 
{ 
    public static DateTime ToDate(this string str) 
    { 
     IFormatProvider provider = System.Globalization.CultureInfo.InvariantCulture; 
     string format = "MM-ddTHH:mm"; 
     return DateTime.ParseExact(str, format, provider); 
    } 
} 
8

DateTime.TryParseExact имеет перегрузку, которая позволяет передавать различные форматы как массив , Каждая строка даты затем сравнивается с различными форматами внутри массива, поэтому вам не нужно заранее знать, какой формат искать.

string d1 = "2013-09-05T15:55"; 
string d2 = "09-05T19:10"; 

string[] formats = new string[] { "yyyy-MM-ddTHH:mm", "MM-ddTHH:mm" }; 
List<string> dates = new List<string>() { d1, d2 }; 

foreach (string date in dates) 
{ 
    DateTime dt; 
    if (DateTime.TryParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) 
    { 
     //dt successfully parsed 
    } 
} 

TryParseExact также возвращает ложь, вместо того, чтобы выбросить исключение, если ни один из форматов в массиве не найден вход.

+0

thx alot. кстати, есть ли список поддерживаемых форматов? – Dardar

+0

В MSDN есть список: http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx – keyboardP

Смежные вопросы