[stringtemplate-interest] date formatting

Terence Parr parrt at cs.usfca.edu
Thu Nov 12 17:53:19 PST 2009


here's a good one (will appear in STv4).

$aDateOrCalendar; format="date:short"$
$aDateOrCalendar; format="time:full"$
$aDateOrCalendar; format="full"$

bydefault it's "short".

Ter

package org.stringtemplate;

import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.util.Map;
import java.util.HashMap;
import java.util.Date;
import java.util.Calendar;

public class DateRenderer implements AttributeRenderer {
     public static final Map<String,Integer> formatToInt =
         new HashMap<String,Integer>() {
             {
                 put("short", DateFormat.SHORT);
                 put("medium", DateFormat.MEDIUM);
                 put("long", DateFormat.LONG);
                 put("full", DateFormat.FULL);

                 put("date:short", DateFormat.SHORT);
                 put("date:medium", DateFormat.MEDIUM);
                 put("date:long", DateFormat.LONG);
                 put("date:full", DateFormat.FULL);

                 put("time:short", DateFormat.SHORT);
                 put("time:medium", DateFormat.MEDIUM);
                 put("time:long", DateFormat.LONG);
                 put("time:full", DateFormat.FULL);
             }
         };

     public String toString(Object o) { return toString(o, "short"); }

     public String toString(Object o, String formatString) {
         Date d = null;
         if ( o instanceof Calendar ) d = ((Calendar)o).getTime();
         else d = (Date)o;
         Integer styleI = formatToInt.get(formatString);
         DateFormat f = null;
         if ( styleI==null ) f = new SimpleDateFormat(formatString);
         else {
             int style = styleI.intValue();
             if ( formatString.startsWith("date:") ) f =  
DateFormat.getDateInstance(style);
             else if ( formatString.startsWith("time:") ) f =  
DateFormat.getTimeInstance(style);
             else f = DateFormat.getDateTimeInstance(style, style);
         }
         return f.format(d);
     }
}



More information about the stringtemplate-interest mailing list