Имя: Пароль:
1C
 
Разобрать строку в дату
0 DTX 4th
 
08.09.16
16:53
Может есть у кого пример функции с RegExp, которой можно быстренько разобрать строку вида
P2016Y9M5DT3H12M41S
в дату?

Причем компонента времени может быть не указана, что будет означать 0.
1 aleks_default
 
08.09.16
17:08
(0)В школе тоже только списывал небось... В работе так не получится.
2 DTX 4th
 
08.09.16
17:15
(1) Списывал, ещё больше давал списывать.
А ты уже в школе был таким жлобом? Или работа так изменила?
3 Lexey_
 
08.09.16
17:20
(0) зачем тебе RegExp? СтрЗаменить + Вычислить
4 Vladal
 
08.09.16
17:25
P2016Y9M5DT3H12M41S

|P
|2016Y --- 2016 год
|9M    --- сентябрь
|5D    --- 5 число
|T
|3H    --- 3 часа
|12M   --- 12 минут
|41S   --- 41 секунда

Литералы не повторяются, их можно считать разделителями.
Ведущих нолей нет, значит нет жесткой позиции.

ПОзицияГода = СтрНайти(СтрокаДаты, "Y");
Год = Сред(СтрокаДаты, (ПозицияГода - 4), 4);

и т.д.
5 Vladal
 
08.09.16
17:27
(3) А со СтрЗаменить вообще песня!
СтрЗаменить(СтрокаДаты, "Y", "-");
...
СтрЗаменить(СтрокаДаты, "h", ":");
-------------------
А хотя нет, литерал М посторяется как Месяц и как Минута.
6 Lexey_
 
08.09.16
17:29
(5) да вот
ДатаСтрокой = "P2016Y9M5DT3H12M41S";
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "P", "");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "Y", ",");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "M", ",");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "DT", ",");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "H", ",");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "M", ",");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "S", "");
Дата = Вычислить("Дата(" + ДатаСтрокой + ")");
(0) ТС, 500рэ с тебя
7 Lexey_
 
08.09.16
17:30
(6) одна строчку ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "M", ",");
можно убрать
8 aleks_default
 
08.09.16
17:32
Да работа повлияла. Стал лучше относится к людям, которые действительно пытаются что-то сделать, и хуже к тем, которые ленятся.  Потому что у первых в конце концов что-то получается и они растут в профессиональном плане, а вторые так и остаются халявщиками.
9 Vladal
 
08.09.16
17:36
(6) Хм... свежая голова.
10 DTX 4th
 
08.09.16
17:42
(3) Да, про дату строкой не подумал.. Спасибо!

Думал с регекспом выбрать что-то типа
\P(d*)Y(d*)M(d*)DT(d*)H(d*)M(d*)S\
А потом через Дата()

Но с группами регулярок в 1С ещё не работал.

(8) Одно дело просить готовую настройку для компоновщика какого-нибудь, а другое - простенькую функцию. И просил скорее не из-за лени, а из-за того, что до вечера надо закончить.
11 Serginio1
 
08.09.16
17:49
12 Метранпаж
 
08.09.16
17:55
(11) Скажите, гражданский... А мух вы тоже из 2С4 бьёте?
13 SleepyHead
 
гуру
08.09.16
18:07
(2) Хамите, парниша. Неудачное начало.
14 Serginio1
 
08.09.16
18:08
(12) У меня многофункциональный аппарат. Он и по танкам и по мухам одинаково стреляет. Кстати те же регексы там есть, и чего только нет.
15 DTX 4th
 
08.09.16
18:52
(13) Начало чего?

Вообще да. Торопился и не придумал, как помягче написать.
(1) Если задел - прошу прощения
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс