Смещение TimeModified веб-соединителя QuickBooks не учитывает переход на летнее время

Я использую QuickBooks Web Connector для извлечения записей сотрудников из QuickBooks Desktop на компьютере под управлением Windows 8.1 с использованием запросов QBXML. Есть ли причина, по которой метки времени TimeModified возвращают смещение, которое не учитывает переход на летнее время? Есть ли способ получить текущее время на хост-системе?

В настоящее время он возвращает "2014-03-27T14:20:53-05:00" для TimeModified, даже если для текущего часового пояса установлено значение "Восточное время" с включенной "Корректировкой на летнее время". Смещение должно быть -04:00.

Запрос QBXML:

<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="12.0"?>
<QBXML>
  <QBXMLMsgsRq onError="stopOnError">
    <EmployeeQueryRq metaData="MetaDataAndResponseData">
      <OwnerID>0</OwnerID>
    </EmployeeQueryRq>
  </QBXMLMsgsRq>
</QBXML>

4 ответа

Решение

По словам модератора сообщества IPP, это ошибка. К сожалению, мы не можем отследить это.

"QBWG-18389 - DST не отображается правильно в полях TimeCreated и TimeModified... У нас нет способа отслеживать их внешне".

Неверное смещение TimeModified - Сообщество Intuit Partner Platform

Я сделал библиотеку С # для обработки этого сценария. Это открытый исходный код.

https://github.com/jsgoupil/quickbooks-sync

После долгой работы над исправлением этой ошибки мы пришли к следующему решению.

QuickBooks неправильно обрабатывает летнее время (DST). Класс DATETIMETYPE в этой библиотеке знает об этой проблеме и исправляет временные метки, поступающие из QuickBooks, удаляя значения смещения в общих случаях использования.

Внутренне QuickBooks возвращает неправильное смещение даты и времени во время летнего времени. Следовательно, QuickBooks ожидает, что вы отправите дату и время с таким же неправильным смещением ИЛИ время даты без смещения в часовом поясе компьютера, на котором установлен QuickBooks.

Я подтвердил эту ошибку даже в QB 2019:(

Хотя это и не оптимально, существует простой обходной путь:

Проверьте, не пришло ли время в будущем. Если это так, вычтите один час.

//Pseudocode
if (timeModified.after(now())
  return timeModified.minus(oneHour)
else
  return timeModified

Это изменение все равно будет работать, если ошибка будет когда-либо исправлена.

На самом деле это не ошибка. Такое поведение отмечено в справочнике по Intuit Onscreen:

«Примечание. DATETIMETYPE не учитывает летнее время. Возвращаемые значения времени всегда используют «стандартное» время».

Вы можете найти это, перейдя к экранной справке и щелкнув любойDATETIMETYPEссылка

Другие вопросы по тегам