Преобразование В Дату

Дайнеко

Well-known member
19.11.2009
951
0
#1
С удивлением обнаружил проблему. Надо строку преобразовать в Дату.
А ф-ия Дата("23.01.2013") выдала целое ругалово и ошибку выполнения "Не могу, мол".
Ладно бы просто дала пустую строку. Почитал описание ф-ии - погрустнел.

Что делать? Лепить вручную аналог и по-буковкам разбирать строку?

Кстати, ф-ия Число() такая-же вредная - болезненно относится в нецифровым символам.
Семерочные были более покладистые.
 

Дайнеко

Well-known member
19.11.2009
951
0
#3
Поделитесь, кто-нибудь. А я выложу для преобразования строки в цифру.
 

puh14

Well-known member
11.07.2008
1 412
0
#4
Была такая функция,брал отсюда http://infostart.ru/public/92455/

Код:
Функция ПолучитьДатуИзСтроки(Стр)
Д = Дата("00010101000000");
Если ПустаяСтрока(Стр) Тогда
Возврат Д;
КонецЕсли;

Если Найти(Стр,".")>0 Тогда

Если Найти(Стр,":")>0 И Найти(Стр," ")>0 Тогда
М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр," ");
Возврат ПолучитьДатуИзСтроки(М[0]);
КонецЕсли;
М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,".");
ИначеЕсли Найти(Стр,"/")>0 Тогда
М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,"/");
ИначеЕсли Найти(Стр,",")>0 Тогда
М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,",");
ИначеЕсли Найти(Стр,"-")>0 Тогда
М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,"-");
КонецЕсли;

Попытка
Если М.Количество()=3 Тогда //"01.02.13" или "01.02.2013"
Год = ?(СтрДлина(М[2])=2,2000+М[2],М[2]);
Д = Дата(Год,М[1],М[0]);
ИначеЕсли М.Количество()=2 Тогда //"02.13" или "02.2013";
Год = ?(СтрДлина(М[1])=2,2000+М[1],М[1]);
Д = Дата(Год,М[0],1);
КонецЕсли;
Исключение
КонецПопытки;

Возврат Д;
КонецФункции
 

Дайнеко

Well-known member
19.11.2009
951
0
#5
Спасибо, спасибо....
М-да.

Однако, все равно спасибо.
РазложитьСтрокуВМассивПодстрок() - я такой аналог тоже сделал/
А вот ПолучитьДатуИзСтроки() - пикантно. Это вместо родной Дата()?

И, как бы это не обидно для автора выразиться, изяШЧества не хватает.

И тем не мене, спасибо,
Есть от чего толкнуть.

Главный результат: я уверился, то надо делать самому.
 

unknown181538

НеГуру
28.12.2008
1 417
0
#6
"И, как бы это не обидно для автора выразиться, изяШЧества не хватает."
Предложите свой вариант - сравним)
 

alex689ru

New member
27.06.2008
3
0
#7
В 1С8.2 дата имеет внутренний формат дата+время.
поэтому чтобы ввести дату в программе, надо указывать дату+время в формате "ГГГГММДДччммсс":
Код:
date1=Дата("20130123000000);	 // для 23.01.2013
date2=Дата("20130123142540);	 // для 23.01.2013 14:25:40

d1=НачалоДня(date1);				  // d1=d2 и равны 23.01.2013 00:00:00 
d2=НачалоДня(date2);				  //  (и определяют первую адресуемую точку на оси времени заданного дня)

d3=КонецДня(date1);					// d3=d4 и равны 23.01.2013 23:59:59
d4=КонецДня(date1);					//  (и определяют последнюю адресуемую точку на оси времени заданного дня)
 

Дайнеко

Well-known member
19.11.2009
951
0
#8
Придумал. Круто, наверное:
Код:
ДатаСтрока = "01.02.13";

Функция ДатаПреобразование(ДатаСтрока)
connector = Новый COMObject("v77.Application");
connector.Connect("enterprise /dC:\Base")
ДатаПравильная = connector.Дата(ДатаСтрока);
Возврат ДатаПравильная;
КонецФункции
 

Darlock

Well-known member
04.01.2008
560
1
#10
Ну я попробую внести лепту... не "V77.Application", а "V77.Enterprise"... если верить манам, то этот объект не придирается к виду ключа, лавное, что ключ есть и все.
 

-master-

Well-known member
14.01.2012
616
12
#11
Я смотрю на эту ветку и плакать хоцца, у 1с нет таких понятий как-то конвертирование, форматирование, глобализация в конце концов?
Это что за недосистема, если в ней таких основополагающих вещей нет? ужаснах...
 

unknown181538

НеГуру
28.12.2008
1 417
0
#12
"Я смотрю на эту ветку и плакать хоцца, у 1с нет таких понятий как-то конвертирование, форматирование, глобализация в конце концов?
Это что за недосистема, если в ней таких основополагающих вещей нет? ужаснах..."
В целом-то есть. Но вот строку в дату нельзя.
 

Дайнеко

Well-known member
19.11.2009
951
0
#13
Я смотрю на эту ветку и плакать хоцца, ...
Да не стоит так рыдать. Исследование вопроса показало, что 1С умеет преобразовывать, только немного "своеобразно": требует в исходной строке времени.
Код:
Функция ДатаИзСтроки(ДатаСтрока) Экспорт
Перем Результат;

Результат = '00010101';
Попытка
Результат = Дата(СокрЛП(ДатаСтрока)+ " 00:00:00");
Исключение
КонецПопытки;

Возврат Результат;
КонецФункции
Это меня удовлетворило и остановило от технологи ручного ковыряния.