Имя: Пароль:
1C
 
Какая дата на самом деле из файла xml
,
0 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.Значение) смещает, совсем не понимаю.

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

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

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

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

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

Вернет дату в формате UTC.
15 MM
 
05.03.18
15:20
(12) Время будет единственным UTC, а вот его отображение в разных часовых поясах может выглядеть по разному. В (11) всё верно сказано.
16 Ministr
 
05.03.18
15:20
Как в исходнике, как раз, что имели ввиду в файле.
17 Serg_1960
 
05.03.18
15:21
(11) Если бы... ох, уж если бы

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