VelocityTemplate,生成开始日期和结束日期之间的日期列表

时间:2019-07-03 10:51:47

标签: amazon-dynamodb aws-api-gateway velocity

我正在将一个BatchGetItem API查询发送到AWS DynamoDB,后者使用Velocity模板动态构建查询字符串。我获取了startdateenddate参数。在以下查询中,我需要收集startdateenddate参数之间的所有日期。

我已经查看了herehere中的文档和示例,其中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)
             ]
         }
    }
}

1 个答案:

答案 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包含所需边界之间的字符串日期数组。