|
Какая дата на самом деле из файла 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 оно таким и было.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |