|
Перевести Из сроки типа "31.10.12" в Дату | ☑ | ||
---|---|---|---|---|
0
palpetrovich
31.10.12
✎
17:54
|
Ничего умнее в голову не приходит как:
ДатаИзСтроки = Дата(Лев(СтрокаДата,6) + "20" + Прав(СтрокаДата,2) + " 0:00:00"); Есть другие варианты или не парится? |
|||
1
zak555
31.10.12
✎
17:55
|
Дата (2012, 10, 31)
|
|||
2
drcrasher
31.10.12
✎
17:55
|
распилить на день-месяц-год и собрать Дата(год, месяц, день) не?
|
|||
3
palpetrovich
31.10.12
✎
17:58
|
(1)(2) а чем это лучше чем (0)?
|
|||
4
hhhh
31.10.12
✎
18:02
|
(3) ну, разбор строки, а в (1)(2) уже разобрано.
|
|||
5
acsent
31.10.12
✎
18:04
|
Дата(Стр + " 00:00:00")
|
|||
6
palpetrovich
31.10.12
✎
18:06
|
(4) все-равно предварительно разбирать, то-ли самостоятельно, то-ли глобальной процедурой
(5) получится 31.10.0012 |
|||
7
zak555
31.10.12
✎
18:07
|
в (0) не будет даты
|
|||
8
palpetrovich
31.10.12
✎
18:11
|
() забьем?
|
|||
9
palpetrovich
31.10.12
✎
18:11
|
(8) -> (7)
|
|||
10
zak555
31.10.12
✎
18:12
|
(8) кого забивать ?
|
|||
11
Fragster
гуру
31.10.12
✎
18:13
|
RegExp = Новый COMОбъект("VBScript.RegExp"); // Объект для использования регулярных выражений
RegExp.IgnoreCase = Истина; //Игнорировать регистр RegExp.Global = Истина; //Поиск всех вхождений шаблона RegExp.MultiLine = Истина; //Многострочный режим RegExp.Pattern = "(\d{2})\.(\d{2})\.(\d{2})"; Matches = RegExp.Execute(Текст); Match = Matches.Item(0); Submatches = Match.Submatches; Дата("20"+Submatches.Item(3)+Submatches.Item(2)+Submatches.Item(1)) |
|||
12
Chin
31.10.12
✎
18:15
|
(10) Он не врет... Я сам в шоке...
Помниться раньше (очень давно) выделял год, месяц, день и только так получалась дата, а сейчас только нули приписать, да год в 4-х символьном виде представить и все... До сегодняшнего дня оставался верен этому заблуждению, а теперь вот это: Дата("31.10.2012" + " 0:00:00") реально работает!!! :) |
|||
13
palpetrovich
31.10.12
✎
18:19
|
(11) круто :)
спасибо всем |
|||
14
Chin
31.10.12
✎
18:25
|
(13) (11) Конечно круто конечно, но все-таки твой вариант наверное попроще будет... :)
|
|||
15
Fragster
гуру
31.10.12
✎
18:29
|
(14) ну, это кусок кода, который из представления вырезает номер, из него по префиксу "вид операции", дату, а потом делает запрос и получает ссылку, чтобы из "эксельки" или там из отчета какого список документов скопировать и импортнуть в 1с было просто
|
|||
16
zak555
31.10.12
✎
19:17
|
Массив = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаДата, ".");
ДатаИзСтроки = Дата("20" + Массив[2], Массив[1]? Массив[0]); |
|||
17
zak555
31.10.12
✎
19:17
|
вернее так
Массив = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаДата, "."); ДатаИзСтроки = Дата("20" + Массив[2], Массив[1], Массив[0]); |
|||
18
Преднаименование
31.10.12
✎
19:29
|
Функция ПреобразованиеДаты(ДатаСтр0, Колонка, Ош,КрОш)
Если не ЗначениеЗаполнено(ДатаСтр0) Тогда Сообщить("В строке" + Строка +" столбце "+Колонка+" не задано значение", ?(Ош,?(КрОш,СтатусСообщения.ОченьВажное,СтатусСообщения.Внимание),СтатусСообщения.Обычное)); ЕСли Ош Тогда ЕстьОшибки=Истина; КонецЕсли; ЕСли КрОш Тогда ЕстьКритическиеОшибки=Истина; КонецЕсли; Возврат Дата(0001,1,1,0,0,0); КонецЕсли; ОшбкаДатыввода=Ложь; ДатаСтр=ДатаСтр0; День_Стр=элВыделитьСловоТочка(ДатаСтр); Месяц_Стр=элВыделитьСловоТочка(ДатаСтр); Год_Стр=элВыделитьСловоТочка(ДатаСтр); Если СтрДлина(Год_Стр)>4 Тогда Если ((КодСимвола(Год_Стр,3)>=48)) и ((КодСимвола(Год_Стр,3)<=57)) тогда Год_Стр = Лев(Год_Стр,4); Иначе Год_Стр = Лев(Год_Стр,2); Конецесли; КонецЕсли; Попытка День_Числ=Число(День_Стр); Месяц_Числ=Число(Месяц_Стр); Год_Числ=Число(Год_Стр); Если Год_Числ<100 Тогда Если Год_Числ<15 Тогда Год_Числ=Год_Числ+2000; Иначе Год_Числ=Год_Числ+1900; КонецЕсли; КонецЕсли; ДатаВвода=Дата(Год_Числ,Месяц_Числ,День_Числ,0,0,0); Исключение ОшбкаДатыввода=Истина; КонецПопытки; Если ОшбкаДатыввода Тогда ЕСли Ош Тогда ЕстьОшибки=Истина; КонецЕсли; ЕСли КрОш Тогда ЕстьКритическиеОшибки=Истина; КонецЕсли; ДатаВвода=Дата(0001,1,1,0,0,0); Сообщить("В строке" + Строка +" столбце "+Колонка+" не удалось преобразовать значение "+ДатаСтр+ " в дату ", ?(Ош,?(КрОш,СтатусСообщения.ОченьВажное,СтатусСообщения.Внимание),СтатусСообщения.Обычное)); КонецЕсли; Возврат ДатаВвода; КонецФункции |
|||
19
Преднаименование
31.10.12
✎
19:30
|
+(18)
Функция элВыделитьСлово(ИсходнаяСтрока) Буфер = СокрЛ(ИсходнаяСтрока); ПозицияПослПробела = Найти(Буфер, " "); Если ПозицияПослПробела = 0 Тогда ИсходнаяСтрока = ""; Возврат Буфер; КонецЕсли; ВыделенноеСлово = СокрЛП(Лев(Буфер, ПозицияПослПробела)); ИсходнаяСтрока = Сред(ИсходнаяСтрока, ПозицияПослПробела + 1); Возврат ВыделенноеСлово; КонецФункции Функция элВыделитьСловоТочка(ИсходнаяСтрока) Буфер = СокрЛ(ИсходнаяСтрока); ПозицияПослПробела = Найти(Буфер, "."); Если ПозицияПослПробела <2 Тогда ИсходнаяСтрока = ""; Возврат Буфер; КонецЕсли; ВыделенноеСлово = СокрЛП(Лев(Буфер, ПозицияПослПробела-1)); ИсходнаяСтрока = Сред(ИсходнаяСтрока, ПозицияПослПробела + 1); Возврат ВыделенноеСлово; КонецФункции |
|||
20
zak555
31.10.12
✎
19:31
|
(18) что это ?
|
|||
21
Serg_1960
31.10.12
✎
19:32
|
Это вечернее обострение
|
|||
22
Преднаименование
31.10.12
✎
19:32
|
(20) Функция, делает из строки дату
|
|||
23
zak555
31.10.12
✎
19:33
|
(22) смотри в (17)
|
|||
24
Serg_1960
31.10.12
✎
19:34
|
Тут разговор на тему 22см - кто лаконичнее алгоритм предложит
|
|||
25
Преднаименование
31.10.12
✎
19:36
|
(23) Это только для двухзначных годов 21 века.
То что дата может быть в прошлом веке не учтено. В заголовке год четырехзначный. |
|||
26
zak555
31.10.12
✎
19:37
|
(25) тогда убрать "20" +
|
|||
27
Serg_1960
31.10.12
✎
19:38
|
(офф) Самое смешное то, что я помню точно - использовал Дата() для строк, где год указан двумя цифрами... вот только не помню как :)
|
|||
28
Serg_1960
31.10.12
✎
19:42
|
Тьфу, вспомнил - кажется так:
ДобавитьМесяц(Дата("31.10.12" + " 00:00:00"),2000*12) |
|||
29
zak555
31.10.12
✎
19:42
|
(28) см. в (12)
|
|||
30
Serg_1960
31.10.12
✎
19:50
|
(29) не в тему. Там речь об строке, в которой год - четыре(!) цифры.
|
|||
31
zladenuw
31.10.12
✎
19:56
|
ех. было бы прикольно.
Но так не работает и не будет работать ВЫБРАТЬ ДатаВремя(ВложенныйЗапрос.Год,ВложенныйЗапрос.Месяц,ВложенныйЗапрос.День) ИЗ (ВЫБРАТЬ "20" + ПОДСТРОКА(&x, 7, 2) КАК Год, ПОДСТРОКА(&x, 4, 2) КАК Месяц, ПОДСТРОКА(&x, 1, 2) КАК День) КАК ВложенныйЗапрос |
|||
32
zak555
31.10.12
✎
20:06
|
(28) так надо было сразу писать
Дата("31.10.2012" + " 00:00:00") |
|||
33
Chin
01.11.12
✎
13:32
|
(32) Ну у автора на входе код двузначный - что тут поделать?
(28) Интересно было бы проверить по времени, что быстрее отработает (0) или (28), смущает наличие "ДобавитьМесяц". |
|||
34
lion11
01.11.12
✎
14:07
|
(34) В (28) гораздо быстрее.
|
|||
35
Fragster
гуру
01.11.12
✎
14:14
|
(31) не работает
|
|||
36
takefive
01.11.12
✎
14:26
|
Дата(СтрЗаменить(Дата("31.10.12" + " 00:00:00"),".00",".20"))
|
|||
37
НЕА123
01.11.12
✎
14:42
|
РазбитаяДата = СтрЗаменить(СтрокаДата,".", Символы.ПС);
ДатаИзСтроки = Дата(2000+ПОлучитьСтроку(РазбитаяДата,3), ПОлучитьСтроку(РазбитаяДата,2), ПОлучитьСтроку(РазбитаяДата,1)) |
|||
38
НЕА123
01.11.12
✎
14:43
|
*
ПОлучитьСтроку = СтрПолучитьСтроку |
|||
39
palpetrovich
01.11.12
✎
15:05
|
(34) откуда "гораздо быстрее"?
спецом проверил, все результаты примерно одинаковы, сделал замеры 3-х вариантов по 3 раза (0.000114...0.000162) Процедура КнопкаВыполнитьНажатие(Кнопка) ДатаИзСтроки = Дата(Лев("31.10.12",6) + "20" + Прав("31.10.12",2) + " 0:00:00"); КонецПроцедуры Процедура ОсновныеДействияФормыВыполнить2(Кнопка) ДатаИзСтроки = ДобавитьМесяц(Дата("31.10.12" + " 00:00:00"),2000*12); КонецПроцедуры Процедура ОсновныеДействияФормыВыполнить3(Кнопка) РазбитаяДата = СтрЗаменить("31.10.12",".", Символы.ПС); ДатаИзСтроки = Дата(2000+СтрПолучитьСтроку(РазбитаяДата,1),СтрПолучитьСтроку(РазбитаяДата,2),СтрПолучитьСтроку(РазбитаяДата,3)); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |