我为 Bixby 开发并在培训中使用 DateTimeExpression,但我正在努力将其转换为 ISO 日期字符串以调用外部 API。
问问题
63 次
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 回答