有人知道LuisPredictionOptions上的TimezoneOffset吗?

问题描述 投票:1回答:2

我正在向LUIS发送基于时间值的查询(例如,“从现在开始10分钟的时间是多少?”)。我希望时间回到本地时区,因此在LuisPredictionOptions对象(C#)上,我设置了TimezoneOffset(例如,我将其设置为提前2小时或120分钟)。

在Fiddler中,我可以看到它调用LUIS端点时正确添加了“ timezoneOffset = 120.0”。

但是,时区以UTC的形式返回-无论是否设置了timezoneOffset或什至将其设置为什么,时间始终使用内置的datetimeV2实体返回UTC。

有人知道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&subscription-key=[subscriptionkey]&q=/luis/v2.0/apps/c1be57f4-3850-489e-8266-db376b82c011?timezoneOffset=240&log=true

并且我正在尝试以下示例话语:“在10分钟内”。

[当我这样做时,timex以UTC表示(例如,timex = 2020-01-11T16:08:25),并且“ value”返回相同的值,减去“ T”,如下所示:value = 2020 -01-11 16:08:25

我可能不知道timex是否采用UTC,但是可能应该通过timezoneOffset来调整“值”?

luis
2个回答
0
投票

TimeZoneInfo类的FindSystemTimeZoneById方法可用于根据系统时间确定正确的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-code-determines-correct-value-of-timezoneoffset


0
投票

似乎在timezoneOffset之前,您的URL中似乎有一个不正确的问号。

使用相同的查询,我可以得到预期的行为,其中返回值相差10分钟。

您使用的是哪个SDK?也许您正在使用V3运行时SDK,该版本使用的V3终结点不使用timeZoneOffset,而是使用datetimeReference,而需要使用V2运行时SDK。

https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/[app-id]?verbose=true&timezoneOffset=10&subscription-key=[key]&q=in 10 minutes

© www.soinside.com 2019 - 2024. All rights reserved.