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 }