![]() |
![]() |
|
Преобразование в дату со временем 1С "2025-10-20 13:40:36.388998+03" Timon1405, PR, kubik_live, MWWRuza, Доминошник, d4rkmesa, ИначеЕсли, alexxx961503, maxab72, Шурик71, Bigbro, arsik, bmitkin, PuhUfa, breezee, ID443, Волшебник, hiddi, JohnGilbert, Philix, Garykom, ndrv, ДемьянТ, laeg, zenon46, sikuda, John D, Elf_80_lvl, denk32, RedPands, SleepyHead, X Leshiy, Greeen, Fragster, runuts, ДобрыйПутник, okmail, Гена, Климов Сергей, p-soft, Builder, Sanchez_22, unenu
| ☑ | ||
---|---|---|---|---|
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) 👍 Именно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |