001    package railo.commons.date;
002    
003    import java.util.HashMap;
004    import java.util.Locale;
005    import java.util.Map;
006    import java.util.TimeZone;
007    
008    import org.joda.time.DateTime;
009    import org.joda.time.DateTimeZone;
010    
011    
012    public class JodaDateTimeUtil extends DateTimeUtil {
013            
014            public static Map zones=new HashMap();
015            public static JREDateTimeUtil jreUtil=new JREDateTimeUtil();
016            
017            JodaDateTimeUtil() {    
018            }
019            
020            long _toTime(TimeZone tz, int year, int month, int day, int hour,int minute, int second, int milliSecond) {
021                    try{
022                            return new DateTime(year, month, day, hour, minute, second, milliSecond, getDateTimeZone(tz)).getMillis();
023                    }
024                    catch(Throwable t){
025                            t.printStackTrace();
026                            return jreUtil._toTime(tz, year, month, day, hour, minute, second, milliSecond);
027                    }
028            }
029            
030            @Override
031            public int getYear(TimeZone tz,railo.runtime.type.dt.DateTime dt){
032                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getYear();        
033            }
034            
035            @Override
036            public int getWeekOfYear(Locale locale,TimeZone tz,railo.runtime.type.dt.DateTime dt){
037                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getWeekOfWeekyear();      
038            }
039    
040            @Override
041            public int getMonth(TimeZone tz,railo.runtime.type.dt.DateTime dt){
042                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getMonthOfYear();
043            }
044            
045            @Override
046            public int getDay(TimeZone tz,railo.runtime.type.dt.DateTime dt){
047                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getDayOfMonth();
048            }
049    
050            @Override
051            public int getHour(TimeZone tz,railo.runtime.type.dt.DateTime dt){
052                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getHourOfDay();
053            }
054            
055            @Override
056            public int getMinute(TimeZone tz,railo.runtime.type.dt.DateTime dt){
057                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getMinuteOfHour();
058            }
059            
060            @Override
061            public int getSecond(TimeZone tz,railo.runtime.type.dt.DateTime dt){
062                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getSecondOfMinute();
063            }
064            
065            @Override
066            public int getMilliSecond(TimeZone tz,railo.runtime.type.dt.DateTime dt){
067                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getMillisOfSecond();
068            }
069    
070            @Override
071            public int getDaysInMonth(TimeZone tz, railo.runtime.type.dt.DateTime date) {
072                    DateTime dt = new DateTime(date.getTime(),getDateTimeZone(tz));
073                    return daysInMonth(dt.getYear(), dt.getMonthOfYear());
074            }
075    
076            @Override
077            public int getDayOfYear(Locale locale,TimeZone tz, railo.runtime.type.dt.DateTime dt) {
078                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getDayOfYear();
079            }
080    
081            @Override
082            public int getDayOfWeek(Locale locale,TimeZone tz, railo.runtime.type.dt.DateTime dt) {
083                    int dow=new DateTime(dt.getTime(),getDateTimeZone(tz)).getDayOfWeek()+1;
084                    if(dow==8) return 1;
085                    return dow;
086            }
087    
088            @Override
089            public long getMilliSecondsInDay(TimeZone tz,long time) {
090                    return new DateTime(time,getDateTimeZone(tz)).getMillisOfDay();
091            }
092    
093            private DateTimeZone getDateTimeZone(TimeZone tz) {
094                    DateTimeZone dtz=(DateTimeZone) zones.get(tz);
095                    if(dtz==null){
096                            dtz=DateTimeZone.forTimeZone(tz);
097                            zones.put(tz, dtz);
098                    }
099                    return dtz;
100            }
101    
102            @Override
103            public long getDiff(TimeZone tz, int datePart,railo.runtime.type.dt.DateTime left,railo.runtime.type.dt.DateTime right) {
104                    return jreUtil.getDiff(tz, datePart, left, right);
105            }
106    
107            @Override
108            public String toString(railo.runtime.type.dt.DateTime date, TimeZone tz) {
109                    //return jreUtil.toString(date, tz);
110                    /*DateTime dt = new DateTime(date.getTime(),getDateTimeZone(tz));
111                    return "{ts '"+dt.getYear()+
112            "-"+dt.getMonthOfYear()+
113            "-"+dt.getDayOfMonth()+
114            " "+dt.getHourOfDay()+
115            ":"+dt.getMinuteOfHour()+
116            ":"+dt.getSecondOfMinute()+"'}";*/
117                    
118                    StringBuilder sb=new StringBuilder();
119                    DateTime dt = new DateTime(date.getTime(),getDateTimeZone(tz));
120            sb.append("{ts '");
121            jreUtil.toString(sb,dt.getYear(),4);
122            sb.append("-");
123            jreUtil.toString(sb,dt.getMonthOfYear(),2);
124            sb.append("-");
125            jreUtil.toString(sb,dt.getDayOfMonth(),2);
126            sb.append(" ");
127            jreUtil.toString(sb,dt.getHourOfDay(),2);
128            sb.append(":");
129            jreUtil.toString(sb,dt.getMinuteOfHour(),2);
130            sb.append(":");
131            jreUtil.toString(sb,dt.getSecondOfMinute(),2);
132            sb.append("'}");
133             
134            return sb.toString();
135            }
136    }