СтрокаВДату

// Автор: Сергей (ildarovich, http://infostart.ru/profile/28527/)
Функция СтрокаВДату(Знач ФорматДаты, Знач СтрокаСДатойОшибка = Ложь) Экспорт

Попытка
тест Формат(‘00010101’“ДФ=” ФорматДаты// – проверка корректности параметра ФорматДата
Исключение
Ошибка = Истина;
Возврат 
‘00010101’
КонецПопытки;

составДаты = Новый Соответствие;                                                                                                        // – части даты
Для Инд По СтрДлина(ФорматДаты) + Цикл
составДаты[Сред(ФорматДаты “dMyHhms”Инд1)] = 0                                                                                // – инициализация частей даты
КонецЦикла;

Для Инд По 12 Цикл
СтрокаСДатой СтрЗаменить(СтрокаСДатойФормат(Дата(1Инд1), “ДФ=MMММ”), Формат(Инд“ЧЦ=4; ЧВН=”));                            // – замена названий месяцев числами
СтрокаСДатой СтрЗаменить(СтрокаСДатойФормат(Дата(1Инд1), “ДФ=MMМ” ), Формат(Инд“ЧЦ=3; ЧВН=”))
КонецЦикла;

Для Инд По СтрДлина(ФорматДаты) Цикл
составДаты[Сред(ФорматДатыИнд1)] = 10 составДаты[Сред(ФорматДатыИнд1)] + Найти(“123456789”Сред(СтрокаСДатойИнд1));  // – накопление частей даты
Ошибка Ошибка ИЛИ Найти(“dMyHhms”Сред(ФорматДатыИнд1)) И НЕ Найти(“0123456789”Сред(СтрокаСДатойИнд1))                 // – необязательная проверка на цифры
КонецЦикла;

составДаты[“y”] = составДаты[“y”] + ?(составДаты[“y”] < 502000, ?(составДаты[“y”] < 10019000));                                   // – дополнение двух цифр года до четырех
Попытка
Возврат 
Дата(составДаты[“y”], составДаты[“M”], составДаты[“d”], составДаты[“H”] + составДаты[“h”], составДаты[“m”], составДаты[“s”])
Исключение
Ошибка = Истина;
Возврат 
‘00010101’
КонецПопытки

КонецФункции // СтрокаВДату