Показать сообщение отдельно
Старый 18.01.2018, 15:50   #1  
BuzCom is offline
BuzCom
Участник
 
59 / 17 (1) ++
Регистрация: 10.08.2017
Неожиданное поведение функции 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);