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 }