001 /** 002 * Implements the Cold Fusion Function monthasstring 003 */ 004 package railo.runtime.functions.string; 005 006 import java.text.DateFormatSymbols; 007 import java.util.Calendar; 008 import java.util.Date; 009 import java.util.Locale; 010 011 import railo.commons.date.JREDateTimeUtil; 012 import railo.runtime.PageContext; 013 import railo.runtime.exp.ExpressionException; 014 import railo.runtime.ext.function.Function; 015 import railo.runtime.i18n.LocaleFactory; 016 017 public final class MonthAsString implements Function { 018 019 private static final int MONTH=1000*60*60*24*32; 020 private static Date[] dates=new Date[12]; 021 static { 022 Calendar cal=JREDateTimeUtil.getCalendar(); 023 cal.setTimeInMillis(0); 024 dates[0]=cal.getTime(); 025 for(int i=1;i<12;i++) { 026 cal.add(Calendar.MONTH,1); 027 dates[i]=cal.getTime(); 028 } 029 } 030 031 public static String call(PageContext pc , double month) throws ExpressionException { 032 return call(month, pc.getLocale()); 033 } 034 public static String call(PageContext pc , double month, String strLocale) throws ExpressionException { 035 return call(month, strLocale==null?pc.getLocale():LocaleFactory.getLocale(strLocale)); 036 } 037 038 private static String call(double month, Locale locale) throws ExpressionException { 039 int m=(int)month; 040 if(m>=1 && m<=12) { 041 return new DateFormatSymbols(locale).getMonths()[m-1]; 042 } 043 throw new ExpressionException("invalid month definition in function monthAsString, must be between 1 and 12 now ["+month+"]"); 044 045 } 046 }