001 package railo.runtime.functions.displayFormatting; 002 003 import java.text.SimpleDateFormat; 004 import java.util.Locale; 005 import java.util.TimeZone; 006 007 import railo.commons.date.TimeZoneUtil; 008 import railo.runtime.PageContext; 009 import railo.runtime.engine.ThreadLocalPageContext; 010 import railo.runtime.exp.ExpressionException; 011 import railo.runtime.exp.PageException; 012 import railo.runtime.functions.BIF; 013 import railo.runtime.op.Caster; 014 import railo.runtime.type.dt.DateTime; 015 016 /** 017 * Implements the CFML Function dateformat 018 */ 019 public final class DateTimeFormat extends BIF { 020 021 private static final long serialVersionUID = 134840879454373440L; 022 public static final String DEFAULT_MASK = "dd-MMM-yyyy HH:mm:ss"; 023 024 /** 025 * @param pc 026 * @param object 027 * @return Formated Time Object as String 028 * @throws ExpressionException 029 */ 030 public static String call(PageContext pc , Object object) throws ExpressionException { 031 return invoke(pc,object, DEFAULT_MASK,Locale.US,ThreadLocalPageContext.getTimeZone(pc)); 032 } 033 034 /** 035 * @param pc 036 * @param object 037 * @param mask Characters that show how CFML displays a date: 038 * @return Formated Time Object as String 039 * @throws ExpressionException 040 */ 041 public static String call(PageContext pc , Object object, String mask) throws ExpressionException { 042 return invoke(pc,object,mask,Locale.US,ThreadLocalPageContext.getTimeZone(pc)); 043 } 044 045 public static String call(PageContext pc , Object object, String mask,String strTimezone) throws ExpressionException { 046 return invoke(pc,object,mask, Locale.US,strTimezone==null?ThreadLocalPageContext.getTimeZone(pc):TimeZoneUtil.toTimeZone(strTimezone)); 047 } 048 049 public static String invoke(PageContext pc , Object object, String mask,Locale locale,TimeZone tz) throws ExpressionException { 050 if(mask==null) mask=DEFAULT_MASK; 051 if(locale==null) locale=Locale.US; 052 DateTime datetime = Caster.toDate(object,true,tz,null); 053 if(datetime==null) { 054 if(object.toString().trim().length()==0) return ""; 055 throw new ExpressionException("can't convert value "+object+" to a datetime value"); 056 } 057 058 SimpleDateFormat format = new SimpleDateFormat(mask, locale); 059 format.setTimeZone(tz); 060 return format.format(datetime); 061 } 062 063 @Override 064 public Object invoke(PageContext pc, Object[] args) throws PageException { 065 if(args.length==1)return call(pc,args[0]); 066 if(args.length==2)return call(pc,args[0],Caster.toString(args[1])); 067 return call(pc,args[0],Caster.toString(args[1]),Caster.toString(args[2])); 068 } 069 }