Как получить однозначные свойства навигации для объекта?

useTimezone - это более раннее решение. Команда MySQL переписала код setTimestamp / getTimestamp довольно недавно, но она будет включена, только если вы установили параметр соединения useLegacyDatetimeCode = false, и вы используете последнюю версию соединителя JDBC mysql. Например:

String url =
 "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false

Если вы загрузите исходный код mysql-коннектора и посмотрите на setTimestamp, очень легко увидеть, что происходит:

Если использовать устаревший код времени даты = false, newSetTimestampInternal (...). Затем, если Календарь, переданный в newSetTimestampInternal, равен NULL, ваш объект даты форматируется в часовом поясе базы данных:

this.tsdf = new SimpleDateFormat("''yyyy-MM-dd HH:mm:ss", Locale.US);
this.tsdf.setTimeZone(this.connection.getServerTimezoneTZ());
timestampString = this.tsdf.format(x);

Очень важно, чтобы Calendar был нулевым - поэтому убедитесь, что вы используете:

setTimestamp(int,Timestamp).

... NOT setTimestamp (int, Timestamp, Calendar).

Теперь должно быть очевидно, как это работает. Если вы построите дату: 5 января 2011 г. 3:00 в Америке / Los_Angeles (или любой другой часовой пояс, который вы хотите), используя java.util.Calendar и call setTimestamp (1, myDate), тогда он примет вашу дату, используйте SimpleDateFormat для его форматирования в часовом поясе базы данных. Итак, если ваша БД находится в Америке / New_York, она построит String '2011-01-05 6:00:00', чтобы вставить (поскольку NY опережает LA на 3 часа).

To получить дату, использовать getTimestamp (int) (без календаря).

Примечание: часовой пояс веб-сервера совершенно неактуален! Если вы не установили для useLegacyDatetimecode значение false, временной интервал веб-сервера используется для форматирования - добавление большого количества путаницы.


Примечание:

Возможно, MySQL мой жалуется, что серверный часовой пояс неоднозначен. Например, если ваша база данных настроена на использование EST, в Java может быть несколько возможных часовых поясов EST, поэтому вы можете пояснить это для mysql-коннектора, указав точно, что такое часовой пояс базы данных:

String url =
 "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York";

Вам нужно только сделать это, если он жалуется.

0
задан Pavlo Mykhailyshyn 18 March 2019 в 13:16
поделиться

1 ответ

При создании HTTP-запроса добавьте Prefer: odata.include-annotations = "*" в свои заголовки HTTP-запроса. Таким образом, ответ будет иметь не только поле _ [Имя поля] _value с идентификатором, но также _ [Имя поля] _value@Microsoft.Dynamics.CRM.lookuplogicalname с логическое имя, которое вы ищете.

Это пример ответа на запрос, запрашивающий parentcustomerid определенного контакта без заголовка:

{
"@odata.context": "https://[Organization URI]/api/data/v9.0/$metadata#contacts(_parentcustomerid_value)",
"value": [
    {
        "_parentcustomerid_value": "bdeb86af-7e1c-e811-a837-000d3ac085f9",
        "contactid": "b050f3bb-dbf7-e811-a98a-000d3ac02bae"
    }
]

}

И это пример ответа для того же запрос с добавленным заголовком:

{
"@odata.context": "https://[Organization URI]/api/data/v9.0/$metadata#contacts(_parentcustomerid_value)",
"value": [
    {
       "_parentcustomerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "parentcustomerid_account",
        "_parentcustomerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
        "_parentcustomerid_value": "bdeb86af-7e1c-e811-a837-000d3ac085f9",
        "contactid": "b050f3bb-dbf7-e811-a98a-000d3ac02bae"
    }
]

}

0
ответ дан André Cavaca 18 March 2019 в 13:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: