【问题标题】:Can I get requester's local time (or offset) from Actions On Google?我可以从 Actions On Google 获取请求者的当地时间(或偏移量)吗?
【发布时间】:2017-01-18 11:30:00
【问题描述】:

我正在使用 API.ai 在 Google API 上的 Actions 上进行构建。为了完成我的一项操作,我需要知道用户的位置和当地时间。

我已经能够成功请求并接收回用户的位置。

但是,我看不到任何获取用户本地时间或时区偏移量的方法。有没有办法做到这一点?

(我意识到我可以使用该位置来找出偏移量,但这需要另一个 API 调用或使用另一个库,我宁愿避免这样做。)

提前致谢。

-- 更新--

根据 Leon 在下面的回答,截至 2017 年 1 月 18 日,API 目前不提供此信息。为了获得所需的信息,我请求了用户精确位置的权限,该位置返回 lat 和 lng。然后我使用GeoNames timezone API 来获取时区偏移量。

【问题讨论】:

  • 是否可以选择在请求中使用@sys.date-time 作为实体?
  • 嗯,这可能是获取它的一个选项,但据我了解,首先必须鼓励用户说出实体匹配的日期和时间。我不认为没有这个实体槽会被填满......除非你知道不同?

标签: actions-on-google google-home api-ai


【解决方案1】:

据我所知,虽然本地时区不包括在内。您可以在库旁边使用位置权限来动态获取本地时间。

我在这里使用的库是 momentTz 和 timezone。后者从位置许可提供的纬度/经度中获取时区。然后使用解析的时区将 momentTz 本地提供的 UTC 标准时间转换为寻求的本地时间。

const startTz = momentTz(); //Returns standard UTC time, independent of locality
const timestamp = 1402629305; // Any random timestamp will work, it wouldn't unnecessarily impede your results 

timezone.data(latitudeValue, longitudeValue, timestamp, function(err, tz) {
  if (err) {
    console.log(err);
  }

var zoneHolder = tz.raw_response.timeZoneId; //Appropriate timezone is returned here based on latitudeValue and longitudeValue passed
const localTime = startTz.tz(zoneHolder).format('LLL'); //local time which you seek;
});

【讨论】:

  • 感谢您的回答。看起来与我最终所做的相似,只是我通过 Geonames API 进行了 timzone 插值。您引用的时区库是否离线进行插值?或者它是否还需要调用第 3 方 API?您能否从快速的 Google 搜索中添加指向时区库的链接,我不确定您使用的是哪个。
  • 不客气。我不确定插值是否离线...,但就我而言,每当我使用呼叫时,我都会同时在线运行其他请求,因此可能很难准确判断。请参阅此处的链接:(npmjs.com/package/node-google-timezone)
【解决方案2】:

设备的时区尚未提供给操作。

【讨论】:

  • 感谢您的回答,莱昂。在我看来,这将是一个有用且不是特别侵犯隐私的信息,因此希望它会很快提供,我将能够在这里添加一个附录。与此同时,我想这就是答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 2011-04-02
相关资源
最近更新 更多