0

我为 Bixby 开发并在培训中使用 DateTimeExpression,但我正在努力将其转换为 ISO 日期字符串以调用外部 API。

4

1 回答 1

0

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

要解析 DateTimeExpression 中的值,您应该检查填充了哪个字段。很好的示例代码来自文档中的地震示例。对于地震示例,您会提出类似“查找 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 日期字符串。如果用户只指定了一个日期,则 end 设置为当天的结束。

于 2019-01-29T21:09:14.900 回答