package org.jtwig.functions.impl.date; import org.jtwig.functions.FunctionRequest; import org.jtwig.functions.SimpleJtwigFunction; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public class DateFormatFunction extends SimpleJtwigFunction { private static NowDateSupplier dateSupplier = new NowDateSupplier() { @Override public Date now() { return new Date(); } }; public static void setDateSupplier (NowDateSupplier dateSupplier) { DateFormatFunction.dateSupplier = dateSupplier; } @Override public String name() { return "date"; } @Override public Object execute(FunctionRequest request) { request.minimumNumberOfArguments(2).maximumNumberOfArguments(3); Date dateToFormat = null; Object firstArgument = request.get(0); if (firstArgument instanceof Date) { dateToFormat = (Date) firstArgument; } else if (firstArgument instanceof String) { if ("now".equals(firstArgument)) { dateToFormat = dateSupplier.now(); } } if (dateToFormat == null) throw request.exception("Invalid 1st argument provided. Expected a java.util.Date or a String \"now\"."); String format = request.getEnvironment().getValueEnvironment().getStringConverter() .convert(request.get(1)); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format); if (request.getNumberOfArguments() == 3) { String timeZone = request.getEnvironment().getValueEnvironment().getStringConverter() .convert(request.get(2)); simpleDateFormat.setTimeZone(TimeZone.getTimeZone(timeZone)); } return simpleDateFormat.format(dateToFormat); } public interface NowDateSupplier { Date now (); } }