|
Поддержка часового пояса в типе ЗначениеXDTO с типом dateTime | ☑ | ||
---|---|---|---|---|
0
ant_222
14.07.23
✎
19:24
|
Здравствуйте,
Это моё первое сообщение на форуме, и я пока вижу никаких инструментов для форматирования (MarkDown, BBCode...), поэтому пишу всё голым текстом. Я обращаюсь в веб-сервису через WSПрокси. Среди данных, принимаемых этим веб-сервисом, есть величины типа dateTime ( https://www.w3.org/TR/xmlschema-2/#dateTime ) с опциональным часовым поясом. Так как тип Дата в 1С не содержит часовой пояс, то в результате простого присвоения примитивного типа Дата полю объекта XDTO: xdto.my_date_field = дата; объект сериализуется в XML с датами без часового пояса. Поэтому я попытался создать ЗначениеXDTO в обход примитивного типа, напрямую через лексическое представление, согласно статье Использование объектов XDTO в web-сервисах (см. раздел Дата) ( https://its.1c.ru/db/metod8dev/content/1793/hdoc ): тип = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "dateTime"); знч = ФабрикаXDTO.Создать(тип, "2007-11-12T12:58:00 AET"); тест = знч.ЛексическоеЗначение; //= "2007-11-12T12:58:00" Но и в этом случае дата также сериализуется без часового пояса. Что я делаю не так? Как передать часовой пояс в ОбъектXDTO? |
|||
1
volumnii
14.07.23
✎
20:45
|
Не смог прочитать тему, так как автор не смог использовать MarkDown или BBCode в первом сообщении(
А так, это не спасает? https://helpf.pro/faq/view/1301.html |
|||
2
Жан Пердежон
14.07.23
✎
21:04
|
Ты не можешь передать инфу о часом поясе, так как типа дата в 1С такой инфы не содержит;
Более того, когда ты пишешь что-то вроде ФабрикаXDTO.Создать(тип, "2007-11-12T12:58:00Z"); строковое представление даты будет сначала преобразовано в типа Дата, а уже только потом сериализовано |
|||
3
ant_222
15.07.23
✎
14:09
|
volumnii,
да, тяжеловато писать пропорциональным шрифтом и без форматирования. Обычно, где нет форматирования, там чистый текст, т.е. моноширинный шрифт с ограниченной длиной строки: e-mail (non-HTML), mailing list, FidoNet, UseNet, BBS. Форматироване с таких случах достигается за счёт моноширинности, например: http://inversed.ru/CoreWar/CoreOps_02.txt Вы дали ссылку на вопрос о пересчёте даты-времени из одного часового пояса в другой. Нет, это не то, что мне нужно, потому что этот вопрос не связан с сериализацией даты в XML. Жан Пердежон, Да, я знаю, что 1С-ный родной тип не содержит часового пояса, однако это не является препятствием к передачи даты-времени с часовым поясом в XML, ведь необходимое строковое представление можно сформировать алгоритмически, приписав часовой пояс в конце, или на оснвании структуры с двумя полями: Дата и Пояс. Типы XML не обязаны один к одному соответсоввать типам системы, и не соответсвуют на практике, что не мешает библиотекам для других языков полноценно поддерживать SOAP. Да, вы (здесь все на ты?) верно заметили насчёт промежуточного преобразования в тип Дата. У меня нет доступа к исходникам 1С (на C++ ?), но наблюдаемое поведение выглядит именно так. ЗначениеXSD типа dateTime должно работать по-другому: так или иначе поддерживать установку часового пояса. Как выйти из этой ситуации без переработки сервера SOAP (что не в моей власти)? Можно ли обмануть его: использовать локальную подправленную копию WSDL, в которой dateTime заменён на string, заполняя бывшие поля dateTime правильным строковым представлением? Можно ли вместо механизма SOAP (WSПрокси, и проч.), вручную средствами 1С свормировать правильный XML и отправить его через запрос POST—поддерживает ли 1С полноценную генерацию XML с простанствами имён? |
|||
4
ant_222
15.07.23
✎
14:26
|
Я написал «к передачи», и должно быть «к передаче»—это была опечатка а не грамматическая ошибка. Сообщения здесь нельзя редактировать?
Жан, как вы тогда объясняете инструкцию в вышеупомянутой статье «Использование объектов XDTO в web-сервисах» о констуировании значения XDTO типа dateTime на основе полноценного лексического представления: Год-Месяц-ДеньTЧас:Минута:Секунда ВременнаяЗона Эта инструкция на официальном сайте не соответствует суровой реальности? А если соответствует, то в каких случаях указание часового пояса может повлиять на поведение 1С? Вы не знаете, как связаться с автором этой статьи, дарящей ложные надежды? |
|||
5
arsik
гуру
17.07.23
✎
10:56
|
Так передавай всегда дату по 0-му часовому поясу.
|
|||
6
Жан Пердежон
17.07.23
✎
11:05
|
(4) что тебе не ясно в описании на ИТС и в чем ты видишь противоречие?
как этим пользоваться - написано в статье ИТС; как это работает - в (2) |
|||
7
Жан Пердежон
17.07.23
✎
11:32
|
>> ЗначениеXSD типа dateTime должно работать по-другому
Во-первых, не ЗначениеXSD, а ЗначениеXDTO; Во-вторых, ЗначениеXDTO как раз и служит для отображения примитивного значение платформы; указание часового пояса очень даже влияет при десериализации. Ну и в-третьих, SOAP - используется поверх http, так что всегда есть вариант сформировать самому XML и заслать её по http - примеров в интернете полно. |
|||
9
Жан Пердежон
17.07.23
✎
11:55
|
(8) ну попробуй передать разные часовые пояса для одной даты, и увидишь что бессмысленно, а что нет
|
|||
10
arsik
гуру
17.07.23
✎
12:08
|
(8) Ну так принимающая сторона, если не указан часовой пояс в дате, будет его интерпретировать как UTC+0.
|
|||
12
Жан Пердежон
19.07.23
✎
19:20
|
(10) принимающая сторона _может_ интерпретировать как угодно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |