18.01.2018, 15:50 | #1 |
Участник
|
Неожиданное поведение функции DT2DATE
Столкнулся тут с непредвиденной ошибкой, может кому будет полезно. Вкратце, у нас идет импорт через xml файлы, где присутствует время обновления файла. Если время старее того, что в базе, то ничего не делать. Но последние два месяца пошли жалобы - инфа не хочет обновляться. Расследование показало, что это в основном относится к вечерней информации. Стал копать и вуаля. Вот оно. Маленькая процедурка, где участвовала функция DT2DATE. В примере ниже видно, что при часовом поясе на сервере UTC+3, функция считает, что на вход ей подается время в UTC, а дату выдает в часовом поясе +3. В настройках сервера приложений для сервиса стоит время по умолчанию UTC, если что. То есть при получении времени от 21 до 0 часов эта п.... тупо прибавляла три часа и возвращала уже следующие сутки. Дальше эта инфа записывалась в базу и целые сутки считалось, что информация в базе новее приходящих обновлений.
Код: EVALUATE(xDateTime,'2018-01-16T21:56:12',9); IF (xDateTime <> 0DT) AND EVALUATE(Time1,COPYSTR(FORMAT(xDateTime,0,9),12,8)) THEN BEGIN xDateTime := CREATEDATETIME(DT2DATE(xDateTime),Time1); END; MESSAGE('%1',xDateTime); |
|
19.01.2018, 00:32 | #2 |
Участник
|
Расследование редкой функции DT2DATE - штука хорошая
Уточните только, пожалуйста, а ошибка где именно обнаружилась (и как исправилась)? 1. В голове программиста 2. При формировании файла XML 3. В ядре Navision 4. В "настройках сервера приложений для сервиса" 5. где-то ещё... Я прочитал, но не всё понял. Особенно про "ошибка только в последние 2 месяца" стала проявляться (что же с UTC случилось? Земля в ноябре налетела на небесную ось? ) |
|
19.01.2018, 10:01 | #3 |
NavAx
|
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
|
За это сообщение автора поблагодарили: jopagames (1). |
19.01.2018, 16:26 | #4 |
Участник
|
Цитата:
Сообщение от jopagames
Расследование редкой функции DT2DATE - штука хорошая
Уточните только, пожалуйста, а ошибка где именно обнаружилась (и как исправилась)? 1. В голове программиста 2. При формировании файла XML 3. В ядре Navision 4. В "настройках сервера приложений для сервиса" 5. где-то ещё... Я прочитал, но не всё понял. Особенно про "ошибка только в последние 2 месяца" стала проявляться (что же с UTC случилось? Земля в ноябре налетела на небесную ось? ) В xml как раз приходит все верно. Именно это время и хотелось бы вносить в базу. Но при импорте тупо добавляется время из текущего часового пояса сервера. Подчеркну - сервера, на котором установлен сам Nav! Чтобы избежать этого, была написана функция, которая сначала разделяла строку на дату и время, а потом снова склеивала. И только после этого вносилось в базу. В 2009 это работало, время попадало правильное. В 2016 - перестало. Именно из-за DT2DATE. Которая теперь так же смотрит на часовой пояс сервера и добавляет часы к дате. Настройка сервера по ссылке выше влияет только при работе веб-сервиса. У нас установлено UTC, но можно поставить и другое - никаких изменений нет. В результате сейчас дату из строки получаем строковой функцией: Код: EVALUATE(xDate,COPYSTR(FORMAT(xDateTime,0,9),1,10),9); |
|
Теги |
datetime, utcdatetime |
|
Похожие темы | ||||
Тема | Ответов | |||
использование функции FIELDCAPTION | 11 | |||
Тригонометрические функции | 2 | |||
OnModify , Rec , Xrec - странное поведение | 3 | |||
Странное поведение GET и FIND в форме | 3 | |||
Функции Navision | 15 |
|