Кто-нибудь знает, что TimezoneOffset делает на LuisPredictionOptions? - PullRequest
1 голос
/ 10 января 2020

Я отправляю LUIS запрос, основанный на значении времени (например, «сколько времени через 10 минут» - просто пример). Я хочу, чтобы время вернулось в местный часовой пояс, поэтому для объекта LuisPredictionOptions (C#) я установил TimezoneOffset (в качестве примера я установил его на 2 часа вперед или 120 минут).

В Fiddler Я вижу, когда он вызывает конечную точку LUIS, он правильно добавляет «timezoneOffset = 120.0».

Однако часовой пояс возвращается как UT C - не имеет значения, установлен ли timezoneOffset или даже для чего оно установлено, время всегда возвращается UT C, используя встроенную сущность datetimeV2.

Кто-нибудь знает, для чего предназначено свойство TimezoneOffset? Я просто использую это неправильно? Есть ли другой способ получить местное время от LUIS?

[Обновление]: Вот несколько примеров: https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/ [AppId]? Verbose = true & timezoneOffset = 0 & subscription-key = [subscriptionkey] & q = / luis / v2.0 / apps / c1be57f4-3850-489e-8266-db376b82c011? timezoneOffset = 120 & log = true

https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/ [AppId]? verbose = true & timezoneOffset = 0 & подписка- key = [subscriptionkey] & q = / luis / v2.0 / apps / c1be57f4-3850-489e-8266-db376b82c011? timezoneOffset = 240 & log = true

, и я пытаюсь использовать следующий пример высказывания: «через 10 минут».

Когда я делаю это, время x указывается в UT C (например, timex = 2020-01-11T16: 08: 25), и «значение» возвращается с тем же значением , минус «Т», следующим образом: значение = 2020-01-11 16: 08: 25

Я мог бы понять, возможно, если timex находится в UT C, но тогда, возможно, «значение» должно быть отрегулировано timezoneOffset?

Ответы [ 2 ]

1 голос
/ 11 января 2020

Похоже, что неправильный знак вопроса в вашем URL, прямо перед timezoneOffset.

Используя тот же запрос, я смог получить ожидаемое поведение, когда возвращаемое значение отличается на 10 минут.

Какой SDK вы используете? Возможно, вы используете V3 Runtime SDK, который использует конечную точку V3, которая не использует timeZoneOffset, но вместо этого использует datetimeReference , и вместо этого вам нужно использовать V2 Runtime SDK.

https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/ [идентификатор приложения]? Verbose = true & timezoneOffset = 10 & ключ подписки = [ключ] & q = через 10 минут

0 голосов
/ 11 января 2020

Метод FindSystemTimeZoneById класса TimeZoneInfo может использоваться для определения правильного timezoneOffset на основе системного времени. Пример в C# показан ниже:

// Get CST zone id
TimeZoneInfo targetZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");

// Get local machine's value of Now
DateTime utcDatetime = DateTime.UtcNow;

// Get Central Standard Time value of Now
DateTime cstDatetime = TimeZoneInfo.ConvertTimeFromUtc(utcDatetime, targetZone);

// Find timezoneOffset
int timezoneOffset = (int)((cstDatetime - utcDatetime).TotalMinutes);

Ссылка: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-concept-data-alteration?tabs=V2#c -код-определяет-правильное-значение-времени-смещения

...