如何从DateTimeExpression

时间:2019-01-29 19:50:02

标签: bixby bixbystudio

我为Bixby开发,并在训练中使用DateTimeExpression,但在如何将其转换为ISO日期字符串以调用外部API方面感到困惑。

1 个答案:

答案 0 :(得分:1)

Bixby的DateTimeExpression功能强大,不仅可以捕获日期,还可以捕获时间间隔,例如“下一个3月”或“ 3月1日至15日之间”。当您使用DateTimeExpression时,Bixby将解析输入并设置Date,DateTime,DateInterval或DateTimeInterval。

要从DateTimeExpression中解析值,您应该检查填充了哪个字段。很好的示例代码来自文档中的Earthquake示例。以地震为例,您将问诸如“查找1963年3月12日发生的地震”或“查找1963年3月发生的地震”之类的问题。这是示例代码(来自文档)

module.exports = function findEarthquakes(
  where, dateTimeExpression, minMagnitude, classification
) {
  var whenStart;
  var whenEnd;

  if (dateTimeExpression.date) {
    whenStart = dates.ZonedDateTime.fromDate(dateTimeExpression.date);
    whenEnd = whenStart.withHour(23).withMinute(59).withSecond(59);
  }
  else if (dateTimeExpression.dateInterval) {
    whenStart = dates.ZonedDateTime.of(
      dateTimeExpression.dateInterval.start.year,
      dateTimeExpression.dateInterval.start.month,
      dateTimeExpression.dateInterval.start.day);
    whenEnd = dates.ZonedDateTime.of(
      dateTimeExpression.dateInterval.end.year,
      dateTimeExpression.dateInterval.end.month,
      dateTimeExpression.dateInterval.end.day,
      23, 59, 59);
  }
  else if (dateTimeExpression.dateTimeInterval) {
    whenStart = dates.ZonedDateTime.of(
      dateTimeExpression.dateTimeInterval.start.year,
      dateTimeExpression.dateTimeInterval.start.month,
      dateTimeExpression.dateTimeInterval.start.day,
      dateTimeExpression.dateTimeInterval.start.hour,
      dateTimeExpression.dateTimeInterval.start.minute,
      dateTimeExpression.dateTimeInterval.start.second);
    whenEnd = dates.ZonedDateTime.of(
      dateTimeExpression.dateTimeInterval.end.year,
      dateTimeExpression.dateTimeInterval.end.month,
      dateTimeExpression.dateTimeInterval.end.day,
      dateTimeExpression.dateTimeInterval.end.hour,
      dateTimeExpression.dateTimeInterval.end.minute,
      dateTimeExpression.dateTimeInterval.end.second);
  }

  var start = whenStart.toIsoString();
  var end = whenEnd.toIsoString();

  // code continues...
}

在上面的示例中,开始和结束是ISO日期字符串。如果用户仅指定一个日期,则将“结束”设置为该天的结束。