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            /**
031             * @see railo.commons.date.DateTimeUtil#year(java.util.TimeZone, railo.runtime.type.dt.DateTime)
032             */
033            public int getYear(TimeZone tz,railo.runtime.type.dt.DateTime dt){
034                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getYear();        
035            }
036            
037            /**
038             * @see railo.commons.date.DateTimeUtil#getWeek(java.util.TimeZone, railo.runtime.type.dt.DateTime)
039             */
040            public int getWeekOfYear(Locale locale,TimeZone tz,railo.runtime.type.dt.DateTime dt){
041                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getWeekOfWeekyear();      
042            }
043    
044            /**
045             * @see railo.commons.date.DateTimeUtil#getMonth(java.util.TimeZone, railo.runtime.type.dt.DateTime)
046             */
047            public int getMonth(TimeZone tz,railo.runtime.type.dt.DateTime dt){
048                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getMonthOfYear();
049            }
050            
051            /**
052             * @see railo.commons.date.DateTimeUtil#getDay(java.util.TimeZone, railo.runtime.type.dt.DateTime)
053             */
054            public int getDay(TimeZone tz,railo.runtime.type.dt.DateTime dt){
055                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getDayOfMonth();
056            }
057    
058            /**
059             * @see railo.commons.date.DateTimeUtil#getHour(java.util.TimeZone, railo.runtime.type.dt.DateTime)
060             */
061            public int getHour(TimeZone tz,railo.runtime.type.dt.DateTime dt){
062                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getHourOfDay();
063            }
064            
065            /**
066             * @see railo.commons.date.DateTimeUtil#getMinute(java.util.TimeZone, railo.runtime.type.dt.DateTime)
067             */
068            public int getMinute(TimeZone tz,railo.runtime.type.dt.DateTime dt){
069                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getMinuteOfHour();
070            }
071            
072            /**
073             * @see railo.commons.date.DateTimeUtil#getSecond(java.util.TimeZone, railo.runtime.type.dt.DateTime)
074             */
075            public int getSecond(TimeZone tz,railo.runtime.type.dt.DateTime dt){
076                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getSecondOfMinute();
077            }
078            
079            /**
080             * @see railo.commons.date.DateTimeUtil#getMilliSecond(java.util.TimeZone, railo.runtime.type.dt.DateTime)
081             */
082            public int getMilliSecond(TimeZone tz,railo.runtime.type.dt.DateTime dt){
083                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getMillisOfSecond();
084            }
085    
086            /**
087             * @see railo.commons.date.DateTimeUtil#getDaysInMonth(java.util.TimeZone, railo.runtime.type.dt.DateTime)
088             */
089            public int getDaysInMonth(TimeZone tz, railo.runtime.type.dt.DateTime date) {
090                    DateTime dt = new DateTime(date.getTime(),getDateTimeZone(tz));
091                    return daysInMonth(dt.getYear(), dt.getMonthOfYear());
092            }
093    
094            /**
095             * @see railo.commons.date.DateTimeUtil#getDayOfYear(java.util.TimeZone, railo.runtime.type.dt.DateTime)
096             */
097            public int getDayOfYear(Locale locale,TimeZone tz, railo.runtime.type.dt.DateTime dt) {
098                    return new DateTime(dt.getTime(),getDateTimeZone(tz)).getDayOfYear();
099            }
100    
101            /**
102             * @see railo.commons.date.DateTimeUtil#getDayOfWeek(java.util.TimeZone, railo.runtime.type.dt.DateTime)
103             */
104            public int getDayOfWeek(Locale locale,TimeZone tz, railo.runtime.type.dt.DateTime dt) {
105                    int dow=new DateTime(dt.getTime(),getDateTimeZone(tz)).getDayOfWeek()+1;
106                    if(dow==8) return 1;
107                    return dow;
108            }
109    
110            /**
111             * @see railo.commons.date.DateTimeUtil#getMilliSecondsInDay(java.util.TimeZone, railo.runtime.type.dt.DateTime)
112             */
113            public long getMilliSecondsInDay(TimeZone tz,long time) {
114                    return new DateTime(time,getDateTimeZone(tz)).getMillisOfDay();
115            }
116    
117            private DateTimeZone getDateTimeZone(TimeZone tz) {
118                    DateTimeZone dtz=(DateTimeZone) zones.get(tz);
119                    if(dtz==null){
120                            dtz=DateTimeZone.forTimeZone(tz);
121                            zones.put(tz, dtz);
122                    }
123                    return dtz;
124            }
125    
126            /**
127             * @see railo.commons.date.DateTimeUtil#getDiff(java.util.TimeZone, int, railo.runtime.type.dt.DateTime, railo.runtime.type.dt.DateTime)
128             */
129            public long getDiff(TimeZone tz, int datePart,railo.runtime.type.dt.DateTime left,railo.runtime.type.dt.DateTime right) {
130                    return jreUtil.getDiff(tz, datePart, left, right);
131            }
132    
133            /**
134             * @see railo.commons.date.DateTimeUtil#toString(railo.runtime.type.dt.DateTime, java.util.TimeZone)
135             */
136            public String toString(railo.runtime.type.dt.DateTime date, TimeZone tz) {
137                    //return jreUtil.toString(date, tz);
138                    /*DateTime dt = new DateTime(date.getTime(),getDateTimeZone(tz));
139                    return "{ts '"+dt.getYear()+
140            "-"+dt.getMonthOfYear()+
141            "-"+dt.getDayOfMonth()+
142            " "+dt.getHourOfDay()+
143            ":"+dt.getMinuteOfHour()+
144            ":"+dt.getSecondOfMinute()+"'}";*/
145                    
146                    StringBuilder sb=new StringBuilder();
147                    DateTime dt = new DateTime(date.getTime(),getDateTimeZone(tz));
148            sb.append("{ts '");
149            jreUtil.toString(sb,dt.getYear(),4);
150            sb.append("-");
151            jreUtil.toString(sb,dt.getMonthOfYear(),2);
152            sb.append("-");
153            jreUtil.toString(sb,dt.getDayOfMonth(),2);
154            sb.append(" ");
155            jreUtil.toString(sb,dt.getHourOfDay(),2);
156            sb.append(":");
157            jreUtil.toString(sb,dt.getMinuteOfHour(),2);
158            sb.append(":");
159            jreUtil.toString(sb,dt.getSecondOfMinute(),2);
160            sb.append("'}");
161             
162            return sb.toString();
163            }
164    }