2012-06-26 2 views
1

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

вот patterens:

DD-MM-YYYY 
    MM-DD-YYYY 
    YYYY-DD-MM 
    YYYY-MM-DD 
    YYYYDDMM 
    YYYYMMDD 

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

strCurrentFormat = rcboDateFormat.SelectedValue.ToString(); 

       DateTime db = DateTime.ParseExact(strOldDate, "DD-MM-YYYY", CultureInfo.InvariantCulture); 

       //DateTime loadedDate = DateTime.ParseExact(strOldDate, strCurrentFormat, null); 

Я решил эту проблему, прежде чем принимая строку, разделить их и переместить год и месяц и день вокруг до надлежащего формата, но это займет много времени, если кто-нибудь знает более простой способ, это будет огромной помощью.

ответ

5

Две вещи:

Первый - использовать правильные строки формата. D и Y - неизвестные спецификаторы формата. d и y есть.

Во-вторых - вы можете поместить свои форматы в строковый массив и использовать ParseExact overload, который принимает этот список форматов.

string[] formats = new string[] 
    {"dd-MM-yyyy", 
    "MM-dd-yyyy", 
    "yyyy-dd-MM", 
    "yyyy-MM-dd", 
    "yyyyddMM", 
    "yyyyMMdd"}; 

DateTime db = DateTime.ParseExact(strOldDate, 
            formats, 
            CultureInfo.InvariantCulture, 
            DateTimeStyles.None); 

Форматы будут производиться по заказу.

+0

Спасибо, отлично работал – Developer

+0

@JonSenchyna - он будет стараться в каждом формате подряд, пока он не удастся. Основная проблема для OP заключалась в том, что в строках формата использовались неверные спецификаторы формата. – Oded

1

http://www.codeproject.com/Articles/14743/Easy-String-to-DateTime-DateTime-to-String-and-For Взятые из

д - Числовой день месяца без ведущего нуля. dd - Числовой день месяца с начальным нулем. ddd - Сокращенное название дня недели. dddd - Полное имя дня недели.

f, ff, fff, ffff, fffff, ffffff, fffffff - Фракция секунды. Чем больше Fs, тем выше точность.

h - 12 Часовые часы, без начального нуля. hh - 12 часовых часов с ведущим нолем. H - 24 Часовые часы, без начального нуля. HH - 24-часовые часы с ведущим нолем.

m - Минуты без начального нуля. мм - минуты с начальным нолем.

M - Числовой месяц без начального нуля. MM - числовой месяц с начальным нулем. MMM - Сокращенное название месяца. MMMM - Полное название месяца.

s - Секунды без начального нуля. ss - Секунды с ведущим нолем.

t - AM/PM, но только первая буква. tt - AM/PM (м./П.м.)

y - Год с отсутствием столетия и ведущий ноль. yy - Год с век, с начальным нолем. гггг - год с веком.

zz - часовой пояс с установленным +/-.

1

Ваша строка формата неверна.

Вам нужно строчные буквы для "д" и "у", так

dd-MM-yyyy 

Читать все о format string на MSDN.

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