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


1С:Предприятие ::

Метки: 

Какая дата на самом деле из файла xml

Я
   Ministr
 
05.03.18 - 13:53
Коллеги, приветствую.

Не могу разобраться, имеется дата в документе xml.
Ее представление на узле:

<date>2017-10-31T12:24:35.387+00:00</date>

Какая дата указана реально тут?

Если использовать метод XML:
Дата = XMLЗначение(Тип("Дата"), ЧтениеXML.Значение);

То возвращается дата 31.10.2017 15:24:35., почему смещается на 3 часа, хотя в xml насколько я понимаю, смещения нету, стоит: +00:00.

3 часа очень похоже на часовой пояс Москва, но зачем функция XMLЗначение(Тип("Дата"), ЧтениеXML.Значение) смещает, совсем не понимаю.

Кто вкурсе, этих смещений, подскажите как обойти это, чтобы не было смещения... и функция возвращала корректные значения даты.
 
 
   Fragster
 
1 - 05.03.18 - 13:54
(0) часовой пояс твоего сеанса скорее всего +3, часовой пояс даты в файле - 0
   Serg_1960
 
2 - 05.03.18 - 14:17
Это формат UTC. Не спрашивай "Почему?" - не придётся отвечать "Это формат XML" :)

https://www.w3.org/TR/xmlschema-2/#dateTime
   Cyberhawk
 
3 - 05.03.18 - 14:24
(2) Так у него в строке внутри ХМЛ время дня "12:24:35"
   Fragster
 
4 - 05.03.18 - 14:26
(3) у него в XML указан часовой пояс
   1Сергей
 
5 - 05.03.18 - 14:36
(1) +1
   Cyberhawk
 
6 - 05.03.18 - 14:38
(4) Ну, указан, автор это вроде бы понимает, раз хочет получать в 1С значение в указанном в файле часовой поясе
   Serg_1960
 
7 - 05.03.18 - 14:50
Автор озвучил желание узнать "корректные значения даты", но забыл уточнить - относительно отправителя или получателя он его желает знать. Ему система вернула дату/время с учетом часового пояса - его это не устраивает. Я дал ссылку - пускай сам позицируется в своих желания. Ко мне то тут какие претензии? (риторический вопрос).
   Cyberhawk
 
8 - 05.03.18 - 14:52
(7) Корректная = как в источнике. Что пришло (на входе), то и в 1С (на выходе) - Я так думаю
   Serg_1960
 
9 - 05.03.18 - 15:02
А я так думаю, что в источнике уже указано всемирное координированное время (UTC) и часового пояса уже там нет - оно было "потеряно" при записи файла. Ну и откуда теперь будем танцевать? "Я понятно объясняю?"(с)
   Fragster
 
10 - 05.03.18 - 15:02
к сожалению, дата в 1с не предполагает часового пояса. и это косяк, как при работе в распределенной базе, так и при просто работе с более-менее нормальными системами. например добавить часовой пояс при экспорте в XML нельзя никак. При импорте можно пересчитать, временно изменив часовой пояс сеанса
 
 Рекламное место пустует
   Fragster
 
11 - 05.03.18 - 15:03
(9) если бы там не было +00:00, то информации о часовом поясе бы не было, и 1с при импорте ничего не пересчитывала бы (считала даты локальными).
   Cyberhawk
 
12 - 05.03.18 - 15:14
"в источнике уже указано всемирное координированное время (UTC) и часового пояса уже там нет - оно было "потеряно" при записи файла"// Ну правильно: в источнике указано время дня, в виде UTC - это значит в определенном часовом поясе. Т.е. в любой точке мира 12 дня по UTC это одно и то же время дня.
А при загрузке в 1С в разных хостах время будет разным - это некорректно. Корректно - как в (8) (как в источнике).
   Вафель
 
13 - 05.03.18 - 15:17
читай как строку, в дату ручками
   Ministr
 
14 - 05.03.18 - 15:19
Коллеги спасибо, разобрался.
В итоге код будет следующим:

Дата = XMLЗначение(Тип("Дата"), ЧтениеXML.Значение);

Далее необходимо

Дата = УниверсальноеВремя(Дата, ЧасовойПоясСеанса());

Вернет дату в формате UTC.
   MM
 
15 - 05.03.18 - 15:20
(12) Время будет единственным UTC, а вот его отображение в разных часовых поясах может выглядеть по разному. В (11) всё верно сказано.
   Ministr
 
16 - 05.03.18 - 15:20
Как в исходнике, как раз, что имели ввиду в файле.
   Serg_1960
 
17 - 05.03.18 - 15:21
(11) Если бы... ох, уж если бы
Сообщить(УниверсальноеВремя(XMLЗначение(Тип("Дата"), "2017-10-31T12:24:35.387+00:00")));// 31.10.2017 12:24:35
   Ministr
 
18 - 05.03.18 - 15:29
(17) +
То же до этого дошел.
   Serg_1960
 
19 - 05.03.18 - 15:30
(15) Там сказано всё "наоборот". Что хотел сказать - я понял, но сказано неверно. Если убрать "+00:00", то получим в 1С время "без преобразование" - это верно. Но вот вопрос: какое время в первоисточнике указано?
   Fragster
 
20 - 05.03.18 - 15:35
(19) любое. не зная часовой пояс источника нельзя сказать.
   Fragster
 
21 - 05.03.18 - 15:36
(19) в (11) все сказано верно. без указания часового пояса 1с воспринимает дату как локальную, с часовым - пересчитывает в часовой пояс сеанса. то, что в (14) - костыль.
   Serg_1960
 
22 - 05.03.18 - 15:40
Ну и? Автор хотел узнать "корректное время". Я сказал что оно "относительно" - или местное время получателя (которое автора не устраивало), или местное время источника. Это-то понятно?  А что автор имеет сейчас? Абстрактное всемирное время :(
   Fragster
 
23 - 05.03.18 - 15:44
(22) абстрактное всемирное время тоже корректно
   Serg_1960
 
24 - 05.03.18 - 15:44
? Ухожу, ухожу немедленно в монастырь! Если в моем Королевстве возможны такие душераздирающие события. Живите сами как знаете...
(х/ф "Золушка")
   Serg_1960
 
25 - 05.03.18 - 15:49
(23) Корректно, но я не об этом. Вопрос о том что автору дальше с этим делать?
   Serg_1960
 
26 - 05.03.18 - 15:57
PS: вопрос снимается. Мы просто о разных вещах говорили. Точнее - я говорил. О случае, когда время было преобразовано при записи в XML и его нужно вновь получить таким, какое оно было в оригинале.
   Ministr
 
27 - 05.03.18 - 16:50
(26) Да. Время не было преобразовано от источника, в оригинале до выгрузки в xml оно таким и было.



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