Имя: Пароль:
1C
1С v8
Красиво преобразовать строку в дату
0 Молодой 1Снег
 
16.04.12
19:18
Есть такой некошерный пример кода:

Функция ПреобразованиеДаты(Дата) Экспорт
Если НЕ ПустаяСтрока(Дата) Тогда    
   ГодКраткий = Прав(Дата, 2);
   Если        ГодКраткий = "83" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1983";        
       ИначеЕсли   ГодКраткий = "84" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1984";
       ИначеЕсли   ГодКраткий = "85" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1985";    
       ИначеЕсли   ГодКраткий = "86" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1986";    
       ИначеЕсли   ГодКраткий = "87" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1987";    
       ИначеЕсли   ГодКраткий = "88" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1988";    
       ИначеЕсли   ГодКраткий = "89" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1989";    
       ИначеЕсли   ГодКраткий = "90" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1990";    
       ИначеЕсли   ГодКраткий = "91" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1991";    
       ИначеЕсли   ГодКраткий = "92" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1992";    
       ИначеЕсли   ГодКраткий = "93" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1993";    
       ИначеЕсли   ГодКраткий = "94" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1994";    
       ИначеЕсли   ГодКраткий = "95" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1995";    
       ИначеЕсли   ГодКраткий = "96" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1996";    
       ИначеЕсли   ГодКраткий = "97" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1997";    
       ИначеЕсли   ГодКраткий = "98" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1998";    
       ИначеЕсли   ГодКраткий = "99" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "1999";    
       ИначеЕсли   ГодКраткий = "00" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2000";    
       ИначеЕсли   ГодКраткий = "01" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2001";    
       ИначеЕсли   ГодКраткий = "02" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2002";    
       ИначеЕсли   ГодКраткий = "03" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2003";    
       ИначеЕсли   ГодКраткий = "04" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2004";    
       ИначеЕсли   ГодКраткий = "05" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2005";    
       ИначеЕсли   ГодКраткий = "06" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2006";    
       ИначеЕсли   ГодКраткий = "07" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2007";    
       ИначеЕсли   ГодКраткий = "08" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2008";    
       ИначеЕсли   ГодКраткий = "09" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2009";    
       ИначеЕсли   ГодКраткий = "10" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2010";    
       ИначеЕсли   ГодКраткий = "11" Тогда
           ДатаНовая = "" + Лев(Дата,6) + "2011";                    
       КонецЕсли;

ДатаЗначение = Дата(Сред(ДатаНовая,7,4),Сред(ДатаНовая,4,2),Сред(ДатаНовая,1,2));    
Возврат ДатаЗначение;    
КонецЕсли;
КонецФункции

Взято отсюда: http://govnokod.ru/9729

Я понял, что на входе имеется строка например такая "16 04 12". Нужно преобразовать её в тип Дата.

Как наиболее правильно решить подобную задачу?

У меня есть два варианта. Первый не очень красивый, второй чуть получше, но вдруг есть еще красивей.

Вариант 1:

Возврат ?(Число(Сред(Дата,7,1))>3,Дата("19"+Сред(Дата,7,2),Сред(Дата,4,2),Сред(Дата,1,2)),Дата("20"+Сред(Дата,7,2),Сред(Дата,4,2),Сред(Дата,1,2)));

Вариант 2:

   Если Число(Сред(Дата,7,1))>3 Тогда
       Век = "19";
   Иначе
       Век = "20";
   КонецЕсли;    
   ДатаЗначение = Дата(Век+Сред(Дата,7,2),Сред(Дата,4,2),Сред(Дата,1,2));
   Возврат ДатаЗначение;
1 Torquader
 
16.04.12
19:29
Ну, во первых, если у вас есть строка даты, то в ней нужно найти два разделителя.
Потом вспомнить, где пишется день, где месяц и где год и привести части к числам (если можно).
Потом проверить числа на правильность и совместность (чтобы не было 31 июня или 30 февраля), а потом преобразовать в дату.
2 Молодой 1Снег
 
16.04.12
19:37
(1) Т.е. такой вариант будет наилучшим:

   Попытка    
       Если Число(Сред(Дата,7,1))>3 Тогда
           Век = "19";
       Иначе
           Век = "20";
       КонецЕсли;    
       ДатаЗначение = Дата(Век+Сред(Дата,7,2),Сред(Дата,4,2),Сред(Дата,1,2));
       Возврат ДатаЗначение;
   Исключение
       Возврат "отказ";
   КонецПопытки

Или можно еще краше?
3 Rizhij_Nikitos
 
16.04.12
19:39
(0) посмотри функцию Формат, она вроде может преобразовать твои входные параметры в дату.
4 Лоботряс
 
16.04.12
19:52
Дата(СтрЗаменить(Дата," ",".")+" 0:00:00")
5 Молодой 1Снег
 
16.04.12
20:08
(4) Вот только век надо как то еще указать