如何从 DateTimeExpression 获取 ISO 日期字符串
How do I get an ISO date string from DateTimeExpression
我为 Bixby 开发并在训练中使用 DateTimeExpression,但我正在努力解决如何将其转换为 ISO 日期字符串以调用外部 API.
Bixby 的 DateTimeExpression 功能强大,不仅可以捕获日期,还可以捕获时间间隔,例如"next March" 或 "between March 1st and 15th"。当您使用 DateTimeExpression 时,Bixby 将解析输入并设置 Date、DateTime、DateInterval 或 DateTimeInterval。
要解析 DateTimeExpression 中的值,您应该检查填充了哪个字段。很好的示例代码来自文档中的地震示例。对于地震示例,您会问 "Find earthquakes that occurred on March 12, 1963" 或 "Find earthquakes that occurred in March, 1963" 这样的问题。这是示例代码(来自文档)
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 被设置为那天的结束。
我为 Bixby 开发并在训练中使用 DateTimeExpression,但我正在努力解决如何将其转换为 ISO 日期字符串以调用外部 API.
Bixby 的 DateTimeExpression 功能强大,不仅可以捕获日期,还可以捕获时间间隔,例如"next March" 或 "between March 1st and 15th"。当您使用 DateTimeExpression 时,Bixby 将解析输入并设置 Date、DateTime、DateInterval 或 DateTimeInterval。
要解析 DateTimeExpression 中的值,您应该检查填充了哪个字段。很好的示例代码来自文档中的地震示例。对于地震示例,您会问 "Find earthquakes that occurred on March 12, 1963" 或 "Find earthquakes that occurred in March, 1963" 这样的问题。这是示例代码(来自文档)
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 被设置为那天的结束。