001 package railo.commons.i18n; 002 003 import java.text.SimpleDateFormat; 004 import java.util.Date; 005 import java.util.Locale; 006 import java.util.Map; 007 import java.util.TimeZone; 008 import java.util.WeakHashMap; 009 010 /** 011 * 012 */ 013 public final class DateFormatPool { 014 015 private final static Map data=new WeakHashMap(); 016 017 /** 018 * pool for formated dates 019 * @param locale 020 * @param timeZone 021 * @param pattern 022 * @param date 023 * @return date matching given values 024 */ 025 public static synchronized String format(Locale locale, TimeZone timeZone, String pattern,Date date) { 026 String key=locale.toString()+'-'+timeZone.getID()+'-'+pattern; 027 Object obj=data.get(key); 028 if(obj!=null) { 029 return ((SimpleDateFormat)obj).format(date); 030 } 031 SimpleDateFormat sdf = new SimpleDateFormat(pattern,locale); 032 sdf.setTimeZone(timeZone); 033 data.put(key,sdf); 034 return sdf.format(date); 035 } 036 037 /** 038 * pool for formated dates 039 * @param locale 040 * @param pattern 041 * @param date 042 * @return date matching given values 043 */ 044 public static synchronized String format(Locale locale, String pattern,Date date) { 045 String key=locale.toString()+'-'+pattern; 046 047 Object obj=data.get(key); 048 if(obj!=null) { 049 return ((SimpleDateFormat)obj).format(date); 050 }//print.ln(key); 051 SimpleDateFormat sdf = new SimpleDateFormat(pattern,locale); 052 data.put(key,sdf); 053 return sdf.format(date); 054 } 055 056 /** 057 * pool for formated dates 058 * @param pattern 059 * @param date 060 * @return date matching given values 061 */ 062 public static synchronized String format(String pattern,Date date) { 063 Object obj=data.get(pattern); 064 if(obj!=null) { 065 return ((SimpleDateFormat)obj).format(date); 066 }//print.ln(pattern); 067 SimpleDateFormat sdf = new SimpleDateFormat(pattern); 068 data.put(pattern,sdf); 069 return sdf.format(date); 070 } 071 072 }