G Serg

22
Рейтинг

Serg G



  •   Регистрация: 27.04.2015 (9 лет назад)

  •   Был(а) на сайте: 30.10.2017

Подписчики 0

Рейтинг 22

Преобразование строки в дату

Статья Программист Платформа 1С v8.3 Конфигурации 1cv8 Windows Бесплатно (free) Нет файла Универсальные функции

Функция преобразует строку в дату. Возможные варианты: "27/янв\2015 3-15-22", "1 янв 2005г. ::01", 20150320220315, "2/3/55", "05/3/15", "1 ФеВраЛЯ 05 г. 20:01:0", "1 янв. 2005 г ::", "1 янв 2005г ::01", "1 ФеВраЛь 05 г. 0:02:", "1 янВа 2005 г. 20:01", "02/04/2015", "20150320220315", "27.08.2015 3:15:22", "27.08-2015 5:24"

22.09.2015    20638    Serg G    18       

22

Комментарии

DevПреобразование строки в дату#10 25.09.15 15:17
(9) premier, (9) premier, вы протестируйте на нескольких сотнях тыщ и будете удивлены. Только не пакетную передачу, а по одной переменной.

))) Блин....вы занудствуете. Если вам известно, что "2/3/55" это время, так передайте в функцию "1/1/01 "+"2/3/55" и не нужны никакие форматы!!! Вам же известно, что это время.... если, конечно, вы не Чумак или Кашпировский ))) Могли бы добавить критики, что функция не отрабатывает "// 2/3/55", а такой "2/3/55 //" делает )) Ну, я же надеялся на вас )

Дам совет, а вы уже можете к нему прислушиваться или нет, это ваше дело. Не используйте никогда сторонние приложения если этого можно избежать. Причин для этого тьма, начиная от средств защиты системы, до самой ОС. Понимаете, между 1с и внешним обьектом может стоять анивирус/hips, зависит от настроек, и ваше приложение может работать нормально, а у пользователя жутко тормозить. Вы лысину заработает на правом яичке, но не догадаетесь, что у него стоит ESET NOD )))
Второй совет, бонус, делайте функции самодостаточными если возможно - это облегчает экспор/импорт/обновления. На самом деле, это, когда у вас есть опыт за пличами. наверное, главный приоритет в функциях/процедурах.

Эту функцию можно вставить в любой проект, даже "голый" и она отработает своё независимо, какие ActiveX/Com разрешены/запрещены/инфицированы/присутствуют и какая это версия - в этом ее огромный плюс.
Более того, разделители же можно добавить, убрать,... гибкость и вариативность присутствует на откупе программиста. Каждый может подстроить под свои нужды или добавить большей универсальности. Но смысл и суть функции это : " меньше вопросов - больше дела". Есть дата(кстати, это не время) и она отработает ее по основным, часто встречающимся форматам, а точнее разделителям/делиметерам. Всё! Если ваш формат какой-то особый - это не для вас. Но в гуще своей, если вам встречаются данные с разными форматами, заполняемые разными программами, сканируемые неизвестно откуда и всё это нужно класть в одно место, зычно и красиво, вот, когда эта функция очень нужна.

В общем, регулярные выражения - это очень крутой механизм, очень-очень, но не в данном, я бы сказал примитивном, случае.
DevПреобразование строки в дату#7 24.09.15 13:33
(6) premier, Знаю и использовал. Так же знаю, что использование функции разбивающей строку на подстроки сократит код в . И?
К слову, то, что вы не видите код и его количество в обьекте RegExp, это не значит, что его нет. ))
Функция самодостаточна в рамках 1с - это огромный плюс.
Протестируйте( в 1с), что будет быстрее работать, скажем с 100 000 строк. Но, можете не тратить время зря. )) Создание обьекта - это уже огромный "тормоз".А 100000 раз превращает такой вариант в кошмар. Так что, не вижу, ни единого плюса от RegExp в данном случае. Разве что, делать пакетную обработку столбца/структуры, что неудобно в рамках таблиц и циклов.
DevПреобразование строки в дату#4 22.09.15 11:46
(3) AnryMc, да, я знаю об этих национальных нюансах. Кстати, MS Excel и MS Access в коде VB используется нац.формат, а в запросах евро "mm/dd/yyyy" - вот где можно запутаться )))
Что касается yyyy/*/* , то можно добавить проверку первого отбора(дней) и если количество сиволов = 4, то ... и тут опять тупик: "а следующий месяц или дни?"
С месяцами mm/dd/yyyy сложнее. Разве что контролировать на >12.
Это сложно и сделать на автомате практически нереально. Нельзя определить 01/01/01 где тут месяцы, года и дни ) без дополнительных вопросов = формат
DevПреобразование строки в дату#2 22.09.15 10:59
(1) 3.14159, это когда вам известно, что в источнике все даты одного формата, а если нет? а если источник не один, а даты заполняют произвольно? и тд.
Форматы, к сожалению, не всегда "делают погоду".
DevПреобразование строки в дату#0 21.09.15 22:02
Функция преобразует строку в дату.
Возможные варианты: "27/янв\2015 3-15-22", "1 янв 2005г. ::01", 20150320220315, "2/3/55", "05/3/15", "1 ФеВраЛЯ 05 г. 20:01:0", "1 янв. 2005 г ::", "1 янв 2005г ::01", "1 ФеВраЛь 05 г. 0:02:", "1 янВа 2005 г. 20:01", "02/04/2015", "20150320220315", "27.08.2015 3:15:22", "27.08-2015 5:24"


DevОптимизация типовых функций из кода 1с в 1С:Предприятие 8.Х#31 10.06.15 21:37
(30) Ну, я только знакомлюсь с 1с, так что, извините, 2010 для меня тоже самое что и 2020. :)
Имеется ввиду, если тест идет одной процедурой, последовательно.
Когда-то давно, тестировал ADO vs DAO на создание нескольких десятков и даже сотен тысяч строк в таблице... Впоследствии выяснилось, , последний покажет худший СВОЙ результат, чем будь он первым. Понимаете, даже хранение результатов первого теста в переменной уже уменьшает оперативную память, что приведет к более медленной отработке второго теста.
Такие "микротесты" (и тут http://infostart.ru/public/64222/) нужно проводить на идеально "вылизанных" машинах: без лишних служб, без сетей, без антивирусов и тп, что может "тормознуть" ОС на мгновение. И то... В общем, если проводить тесты, то уж на максимальных нагрузках.

>...на большом количестве выполнений.
Разбейте томик К.Маркса на слова, например, где результаты будут более 5 сек, хотя бы.


ps: Еще, подозреваю, что скорость wscript и сscript разная и точно зависит от установленных комплексов защиты компьютера и их настройки. Т.е. на разных машинах, результаты могут отличаться.
А на чем работает 1с при Eval()(Выполнить()) или на дефолте в системе?
DevОптимизация типовых функций из кода 1с в 1С:Предприятие 8.Х#28 10.06.15 4:24
результаты тестов зависят от многих факторов. Например, большая часть времени уходит на создание обьекта (New RegExp) , на чем часто играют создатели, так сказать, "более быстрых альтернатив". Если же он создан и уже весит в памяти , то отработает, наверняка, быстрее всех. Хотя, Split() - это слишком примитивно.

Во-вторых, существенно влияет последовательность тестов. Т.е., что вы тестируете первым, то и покажет лучшие СВОИ результаты. Это связанно с оперативной памятью. (Кто-то ранее заметил, что запись в одну переменную - но физически это не так.)
RegExp - проверенный временем обьект, очень мощный и нужный. Главный минус, что он сторонный/внешний и ОСевой.
(Могу ошибаться, но в учебных платформах 1C com-обьекты тоже не подключаются. )

И всё же, при всех плюсах RegExp-a, желательно использовать стандартные наборы функций. Впринципе, это закон любой седы.

Реализовать такой обьект, как RegEx, в 1с не реально, имхо! Лучше лоббировать его включение и оптимизацию в саму платформу.