Devashish Khattar
Devashish Khattar

Reputation: 79

How do I convert a String to date in velocity template?

I want to convert $departureFromDate (format:yyyy-MM-dd) to date object so that I can perform increment operations on it. I have been trying to do it the following way:

#set($departureFromDate = "{{jsonPath request.body 
'$.departureFromDate'}}")
#set($dateObj = $date.toDate('yyyy-MM-dd',"$departureFromDate"))
#set($calendar = $date.getCalendar())   
$calendar.setTime($dateObj)  
$calendar.add(6,5)

The above code works if give an actual date like:

#set($dateObj = $date.toDate('yyyy-MM-dd',"2018-09-22"))

But does not work when I try to use $departureFromDate

Upvotes: 1

Views: 6537

Answers (1)

Claude Brisson
Claude Brisson

Reputation: 4130

There are several problems in your code. First, as user7294900 noted, the right value of the first assignation seems quite weird. Then, you don't need to instanciate yourself a calendar (plus, you can write $date.calendar instead of $date.getCalendar(), and you don't need double quotes around string arguments).

#set($body = '{ "departureFromDate" : "2018-03-01" }')
$json.parse($body)
#set($departureFromDate = $json.departureFromDate)
#set($dateObj = $date.toDate('yyyy-MM-dd', $departureFromDate))
#set($calendar = $date.toCalendar($dateObj))
$calendar.add(6, 5)

The above code uses a JSON parsing tool, whose parse() method renders a json wrapper, that you shall provide in your context.

As a final advise, if you hadn't already thought of it, be sure to print $obj and $obj.class.name in your context as a trivial debugging technique if you don't understand what happens.

Upvotes: 1

Related Questions