Смещение 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
ссылка