Имя: Пароль:
1C
1С v8
Преобразование в дату со временем 1С "2025-10-20 13:40:36.388998+03"
0 RedPands
 
20.10.25
16:22
Доброго времени суток,
Может кто сталкивался с преобразованием формата "2025-10-20 13:40:36.388998+03" в дату со временем 1С?
Поделитесь функцией пожалуйста :)
1 Kigo_Kigo
 
20.10.25
16:30
Лев(ДатаВремя,Найти(ДатаВремя,".")-1)
2 Галахад
 
гуру
20.10.25
16:39
Еще смещение зоны +03 ))
3 PR
 
20.10.25
16:39
(0) XMLЗначение
4 RedPands
 
20.10.25
16:44
(1) Спасибо.
Что-то типа этого получилось, выглядит так себе, но пойдёт :D

МестноеВремя(Дата(СтрЗаменить(Лев(ДатаВремя,Найти(ДатаВремя,".")-1),"-",".")),"Europe/Moscow")
5 spiller26
 
20.10.25
16:48
Попробуйте так
XmlЗначение(Тип("Дата"), "2025-10-20 13:40:36.388998+03")
6 Timon1405
 
20.10.25
16:50
(3) (5) сами пробовали? если именно так написать при этом секунды теряются...
7 maxab72
 
20.10.25
16:57
(6) там и минуты с часами теряются
8 Timon1405
 
20.10.25
17:03
(7) угу, можно типа стрзаменить пробел на T чтобы XmlЗначение читало, но +3 GMT смещение XmlЗначение вроде всё равно не умеет. ну или я не знаю как)
9 Fragster
 
гуру
20.10.25
17:04
надо пробел (или неразрывный пробел) заменить на английскую заглавную T и норм XMLЗначение будет читать
10 Fragster
 
гуру
20.10.25
17:05
возможно, надо будет убрать дробную часть секунд, но может и так прокатит
11 Fragster
 
гуру
20.10.25
17:05
ну и может быть +03 надо будет заменить на +03:00
12 Fragster
 
гуру
20.10.25
17:11
Вход = "2025-10-20 13:40:36.388998+03";
Т = СтрЗаменить(Вход, " ", "T");
Т = СтрРазделить(Т, ".+");
Т = Т[0] + "+" + Т[Т.ВГраница()]+":00";
Выход = XMLЗначение(Тип("Дата"), Т)
13 RedPands
 
20.10.25
17:11
(11) Мда..
Ещё и Дата() не может нормально прочитать ГГГГ.мм.дд чч:мм:сс выдаёт фигню 17.04.0026 16:10:53 :D
14 Fragster
 
гуру
20.10.25
17:11
по хорошему там еще Z может быть на конце
15 Fragster
 
гуру
20.10.25
17:12
(13) часовые пояса - это боль. в 1с особенно
16 Fragster
 
гуру
20.10.25
17:16
Вход = "2025-10-20 13:40:36.388998+03";
Т = СтрЗаменить(Вход, " ", "T");
Т = СтрРазделить(Т, ".+");
КоличествоКусков = ?(СтрНайти(Вход, ".") <> 0, 2, 1);
Т = Т[0] + ?(Т.Количество() > КоличествоКусков, "+" + Т[Т.ВГраница()]+":00", "");
Выход = XMLЗначение(Тип("Дата"), Т);

Вход = "2025-10-20 13:40:36.388998";
Т = СтрЗаменить(Вход, " ", "T");
Т = СтрРазделить(Т, ".+");
КоличествоКусков = ?(СтрНайти(Вход, ".") <> 0, 2, 1);
Т = Т[0] + ?(Т.Количество() > КоличествоКусков, "+" + Т[Т.ВГраница()]+":00", "");
Выход = XMLЗначение(Тип("Дата"), Т);
17 Fragster
 
гуру
20.10.25
17:20
отдельно надо понять, будут ли даты из часовых поясов с дробным смещением (типа Ньюфаундленд) и как они выглядят и что с ними делать
18 RedPands
 
20.10.25
17:21
(16) Спасибо.
Буду пробовать.
Первый раз сталкиваюсь с подобным форматом обычно YYYY-MM-DDThh:mm:ssTZD передают или по Москве время и дату.
19 Fragster
 
гуру
20.10.25
17:23
(18) доработать для отрицательных часовых поясов предлагаю самостоятельно )
20 Гена
 
гуру
20.10.25
17:24
Похоже на западную дату в микросекундах, что-то было у Майкрософта. По логике там же и должен быть метод перевода в даты с секундами. Не проще ли в источнике данных его применить и не мучать 1С?
21 RedPands
 
20.10.25
17:25
(19) Ахаха.
Ну мне в основном нужна только Москва )
22 RedPands
 
20.10.25
17:25
(20) Источник данных - API Яндекса )
23 Garykom
 
гуру
20.10.25
17:28
Регулярки в 1С давно есть
24 Fragster
 
гуру
20.10.25
17:30
(23) на замену?
25 Гена
 
гуру
20.10.25
17:31
(22) Понятно. Ещё года два назад Яндекс был голландским. Видать, даты остались в том формате )
26 Fragster
 
гуру
20.10.25
17:37
(22) не верю. если там прям апи, то данные должны быть в json, а оно имеет формат ISO и парсится XMLЗначение напрямую
27 RedPands
 
20.10.25
17:44
(26) Я тоже не верю, но приходится работать с тем, что есть :D

https://yandex.ru/routing/doc/ru/vrp/redoc/index.html#operation/getTaskHistory

created_a - string^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
Дата и время создания задачи в UTC.

"created_at":"2025-10-20 13:40:36.388998+03"
28 Garykom
 
гуру
20.10.25
17:55
(24) Ну почти
&НаСервере
Функция ПреобразоватьДату(ДатаСтрокой)
	
	СтрокаПоиска = "^(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,6}))?([+-]\d{2})$";
	
	Результат = СтрНайтиПоРегулярномуВыражению(ДатаСтрокой, СтрокаПоиска, , , , Истина);
	Группы = Результат.ПолучитьГруппы();
	
	Год = Группы[0].Значение;
	Месяц = Группы[1].Значение;
	День = Группы[2].Значение;
	Часы = Группы[3].Значение;
	Минуты = Группы[4].Значение;
	Секунды = Группы[5].Значение;
	
	ДатаСтрока = СтрШаблон("%1.%2.%3 %4:%5:%6", Год, Месяц, День, Часы, Минуты, Секунды);
	
	Возврат Дата(ДатаСтрока);
	
КонецФункции

&НаСервере
Процедура Команда1НаСервере()
	
	СтрокаЗначения = "2025-10-20 13:40:36.388998+03";
	РезультатДата = ПреобразоватьДату(СтрокаЗначения);
	Сообщить(РезультатДата);
	
КонецПроцедуры
29 Garykom
 
гуру
20.10.25
17:47
(28) Можно переписать покороче
Но так понятней и универсальней
30 Garykom
 
гуру
20.10.25
17:48
Кстати вот для ваяния регулярок прекрасно подходит ИИ
31 Гена
 
гуру
20.10.25
17:50
(27) Ну и где там микросекунды, если для секунд d{2} - всего две цифры.
32 Garykom
 
гуру
20.10.25
17:52
(27) хрень какая то
string^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$ - это стандартый JSON ISO формат, штатно парсится через ФорматДатыJSON.ISO

а в примере "2025-10-20 13:40:36.388998+03" - это нихрена не ISO
T нет и Z забыли
должно быть нечто вроде "2025-10-20T13:40:36.388998Z+03"
33 arsik
 
гуру
20.10.25
17:56
(27) Да ну. Пиздешь какой то. Может при запросах нужно в заголовках http указать нужный параметр? Регион или хотя бы язык?
34 RedPands
 
20.10.25
17:57
(32) Я понимаю это, что должно быть так, но они, видимо, прошляпили этот момент.
Поддержка морозит, а решать задачу нужно )
35 Garykom
 
гуру
20.10.25
18:02
(28)+ СтрЗаменитьПоРегулярномуВыражению() тоже есть, но я еще не разбирался с ним
36 Fragster
 
гуру
20.10.25
18:08
(27) пиши им в тп, а еще проверь, что у тебя в заголовках есть Accept: application/json или как там его. иногда может штырить всякие апишки, если его нет.
37 RedPands
 
20.10.25
18:47
(36)

Content-Type: application/json - о нём наверное. На месте он )


Ладно. Спасибо всем за помощь.
Поддержка создала тикет, может решим.
38 Garykom
 
гуру
20.10.25
18:50
(37) Content-Type это уже при получении с сервера или наоборот отправке на сервер, как тип содержимого
А в заголовках запроса перед получением как раз Accept ставят обычно - типа указание серверу какой результат хотим в содержимом
39 Timon1405
 
20.10.25
18:54
(35) да там все стандартно, разбираться особо нечего
МояДата= Дата(СтрЗаменитьПоРегулярномуВыражению(ЯндексДата,"^(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,6}))?([+-]\d{2})$","$3.$2.$1 $4:$5:$6"));
40 Garykom
 
гуру
20.10.25
18:55
(39) О зашибись как просто
41 PR
 
20.10.25
20:23
(6) Может за ТС еще и код под ключ написать, потому что он гуглить не умеет?
XMLЗначение(Тип("Дата"), "2025-01-01T01:02:03")
Откуда он взял формат без T? Я ХЗ
Нужно ли ему предварительно преобразовать свой непонятно откуда выкопанный формат к формату с T? Вероятно, скорее всего
Буду ли за него это делать я? Конечно же нет
42 PR
 
20.10.25
20:31
(13) И ведь, что самое обидное, в СП явно написано, что Дата() из ГГГГ.мм.дд чч:мм:сс вернет нормальную дату, а не работает
43 PR
 
20.10.25
20:31
Вообще, если нет шансов на нормальную дату с T, то можно просто тупо все тире, двоеточия, точки и плюсы заменить на пробелы, а потом строку через СтрРазделить закинуть в массив и брать нужные части массива для нужных частей даты
И просто и понятно и красиво и от варианта "2025-2-9 3:9:5.388998+03" защищено
44 PR
 
20.10.25
20:35
(37) Ну да, зачем писать копеечную функцию, которую поищет в строке T и, если найдет, то получит дату через XMLЗначение, а если не найдет, то через (43)
Лучше месяцами ебаться с техподдержкой и в конце все-равно сделать так, ага
45 PR
 
20.10.25
20:36
(40) Да нормально
Взял месяц отпуска, разобрался спокойно, что там за вермут нахуевертили
46 PR
 
20.10.25
20:38
+(45) Именно поэтому ИИ — это тупиковый путь развития
Как что-то где-то ускорить, проанализировать, проработать — это да
Как написать конечный рабочий понятный поддерживаемый продукт — да ни в коем случае, мертворожденное дитя
47 Волшебник
 
20.10.25
20:42
(46) Я об этом говорил в своём интервью https://wizard.mista.ru/video/2024-05-24-CORS-Friday-Mitichkin-Otkalo.html
У ИИ нет потребности удовлетворять ваши потребности.
48 PR
 
20.10.25
20:47
(47) 👍 Именно
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.