我正在将一个BatchGetItem API查询发送到AWS DynamoDB,后者使用Velocity模板动态构建查询字符串。我获取了startdate
和enddate
参数。在以下查询中,我需要收集startdate
和enddate
参数之间的所有日期。
我已经查看了here和here中的文档和示例,其中ComparisonDateTool()
提供了数年,数月或数天的信息。但是我想解决方案会因为这些选项而变得复杂(即手动生成列表)。因此,寻找替代的(可能是快速的)选项。
#set($startDate = "$input.params('startdate')") // ex. 2019-05-27
#set($endDate = "$input.params('enddate')") // ex. 2019-06-02
... some script to get all dates between start and end date
#set($dates = ["date1", "date2", "date3", ...])
//DynamoDB batchGetItem query
{
"RequestItems": {
"tableName": {
"Keys": [
"dates": $util.toJson($dates)
]
}
}
}
答案 0 :(得分:0)
由于您无法在AWS环境中使用自己的自定义Java工具,因此您必须借助Velocity模板中的日期和日历操作。
## parse input dates
#set($start = $date.toDate('yyyy-MM-dd', $startDate))
#set($end = $date.toDate('yyyy-MM-dd', $endDate))
## get calendars
#set($calendar = $date.toCalendar($start))
#set($endCal = $date.toCalendar($end))
## get the number of days
#set($diff = $date.difference($calendar, $endCal).days)
#set($dates = [])
## loop on days
#foreach($day in [0..$diff])
#set($nextDate = $date.format('yyyy-MM-dd', $calendar))
$dates.add($nextDate)
$calendar.add(5, 1) ## '5' means 'days'
#end
...
现在$dates
包含所需边界之间的字符串日期数组。