Вход | Регистрация


Разобрать строку в дату

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

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

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

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

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

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

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

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

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

Вообще да. Торопился и не придумал, как помягче написать.
(1) Если задел - прошу прощения

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует