VelocityTemplate, создать список дат между начальной и конечной датой - PullRequest
0 голосов
/ 03 июля 2019

Я отправляю запрос API batchGetItem в AWS DynamoDB, который использует шаблон скорости для динамического построения строки запроса. Я получаю параметры startdate и enddate. В следующем запросе мне нужно собрать все даты между startdate и enddate params.

Я рассмотрел документацию и примеры в здесь и здесь , 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 голосов
/ 04 июля 2019

Поскольку вы не можете использовать свои собственные инструменты Java в среде AWS, вам приходится прибегать к манипуляциям с датами и календарями из шаблонов 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 содержит массив строковых датмежду желаемыми границами.

...