1 55 package org.lateralnz.common.util; 56 57 import java.util.ArrayList ; 58 import java.util.Calendar ; 59 import java.util.Date ; 60 import java.util.HashMap ; 61 import java.util.List ; 62 import java.util.Locale ; 63 import java.text.ParseException ; 64 import java.text.SimpleDateFormat ; 65 66 71 public final class DateUtils implements Constants { 72 private static final String CLASSNAME = DateUtils.class.getName(); 73 74 77 public static final String MON = "Mon"; 78 79 82 public static final String TUES = "Tues"; 83 84 87 public static final String WED = "Wed"; 88 89 92 public static final String THURS = "Thurs"; 93 94 97 public static final String FRI = "Fri"; 98 99 102 public static final String SAT = "Sat"; 103 104 107 public static final String SUN = "Sun"; 108 109 112 public static final String DAY_DATE_FORMAT = "dd"; 113 114 117 public static final String MONTH_DATE_FORMAT = "MM"; 118 119 122 public static final String YEAR_DATE_FORMAT = "yyyy"; 123 124 127 public static final String REVERSE_DATE_FORMAT = "yyyyMMdd"; 128 129 132 public static final String REVERSE_DATE_TIME_FORMAT = REVERSE_DATE_FORMAT + "HHmmss"; 133 134 137 public static final long ONE_DAY_IN_MILLISECONDS = 1000*60*60*24; 138 139 private static HashMap dateFormats = new HashMap (); 140 141 144 public static Date BEGINNING_OF_TIME; 145 146 149 public static Date END_OF_TIME; 150 151 static { 152 try { 153 SimpleDateFormat tmp = new SimpleDateFormat (REVERSE_DATE_FORMAT); 154 BEGINNING_OF_TIME = tmp.parse("00010101"); 155 END_OF_TIME = tmp.parse("99991231"); 156 } 157 catch (Exception e) { 158 e.printStackTrace(); 159 } 160 } 161 162 163 private DateUtils() { } 164 165 173 public static final Date add(Date date, int field, int amount) { 174 Calendar c = Calendar.getInstance(); 175 176 c.setTime(date); 177 178 c.add(field, amount); 179 180 return c.getTime(); 181 } 182 183 186 public static final Date addDays(Date date, int days) { 187 return add(date, Calendar.DATE, days); 188 } 189 190 195 public static final Date applyTime(Date d, String time) { 196 if (time.length() < 6) { 197 time = StringUtils.rpad(time, '0', 6); 198 } 199 Calendar c = Calendar.getInstance(); 200 201 c.setTime(d); 202 203 c.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time.substring(0,2))); 204 c.set(Calendar.MINUTE, Integer.parseInt(time.substring(2,4))); 205 c.set(Calendar.SECOND, Integer.parseInt(time.substring(4,6))); 206 return c.getTime(); 207 } 208 209 213 public static final String getCurrentMonthAsString() { 214 Calendar clen = Calendar.getInstance(); 215 int month = clen.get(Calendar.MONTH); 216 int year = clen.get(Calendar.YEAR); 217 218 String m = EMPTY; 219 String y = EMPTY + year; 220 221 if (month < 10) { 222 m += "0" + month; 223 } 224 else { 225 m += month; 226 } 227 228 return m+y; 229 } 230 231 237 public static final List getDateRangeList(Date start, Date end) { 238 ArrayList rtn = new ArrayList (); 239 Calendar c = Calendar.getInstance(); 240 c.setTime(start); 241 while (c.getTime().before(end)) { 242 rtn.add(c.getTime()); 243 c.add(Calendar.DATE, 1); 244 } 245 246 return rtn; 247 } 248 249 public static final int getDaysBetween(Date d1, Date d2) { 250 return (int)Math.abs((d1.getTime() - d2.getTime()) / 86400000); 251 252 } 253 254 258 public static final String getShortDay(int dayOfWeek) { 259 switch (dayOfWeek) { 260 case Calendar.MONDAY : 261 return MON; 262 case Calendar.TUESDAY : 263 return TUES; 264 case Calendar.WEDNESDAY : 265 return WED; 266 case Calendar.THURSDAY : 267 return THURS; 268 case Calendar.FRIDAY : 269 return FRI; 270 case Calendar.SATURDAY : 271 return SAT; 272 case Calendar.SUNDAY : 273 return SUN; 274 default : 275 return EMPTY; 276 } 277 } 278 279 283 public static final String getShortDay(Date date) { 284 Calendar c = Calendar.getInstance(); 285 c.setTime(date); 286 int day = c.get(Calendar.DAY_OF_WEEK); 287 return getShortDay(day); 288 } 289 290 295 public static final Date getStartOfWeek(Date d) { 296 Calendar c = Calendar.getInstance(); 297 c.setTime(d); 298 while (c.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) { 299 c.add(Calendar.DATE, -1); 300 } 301 return c.getTime(); 302 } 303 304 307 private static final SimpleDateFormat getFormat(String className, String pattern, Locale locale) { 308 SimpleDateFormat format; 309 String key = className + UNDERSCORE + pattern + UNDERSCORE + (locale != null ? locale.toString() : EMPTY); 310 if (!dateFormats.containsKey(key)) { 311 if (locale != null) { 312 format = new SimpleDateFormat (pattern, locale); 313 } 314 else { 315 format = new SimpleDateFormat (pattern); 316 } 317 318 synchronized (dateFormats) { 319 if (!dateFormats.containsKey(key)) { 320 dateFormats.put(key, format); 321 } 322 } 323 } 324 else { 325 format = (SimpleDateFormat )dateFormats.get(key); 326 } 327 328 return format; 329 } 330 331 337 public static final String formatDate(String callerClassName, Date d, String pattern) { 338 return formatDate(callerClassName, d, null, pattern); 339 } 340 341 348 public static final String formatDate(String callerClassName, Date d, Locale locale, String pattern) { 349 if (d == null) { 350 return EMPTY; 351 } 352 353 SimpleDateFormat format = getFormat(callerClassName, pattern, locale); 354 synchronized (format) { 355 return format.format(d); 356 } 357 } 358 359 365 public static final Date parseDate(String callerClassName, String s, String pattern) throws ParseException { 366 return parseDate(callerClassName, s, null, pattern); 367 } 368 369 376 public static final Date parseDate(String callerClassName, String s, Locale locale, String pattern) throws ParseException { 377 if (StringUtils.isEmpty(s)) { 378 return null; 379 } 380 381 SimpleDateFormat format = getFormat(callerClassName, pattern, locale); 382 synchronized (format) { 383 return format.parse(s); 384 } 385 } 386 387 394 public static final boolean isEqualUsingPattern(String callerClassName, Date d1, Date d2, String pattern) throws ParseException { 395 return isEqualUsingPattern(callerClassName, d1, d2, null, pattern); 396 } 397 398 406 public static final boolean isEqualUsingPattern(String callerClassName, Date d1, Date d2, Locale locale, String pattern) throws ParseException { 407 if (d1 == null || d2 == null) { 408 return false; 409 } 410 411 String s1 = formatDate(callerClassName, d1, locale, pattern); 412 String s2 = formatDate(callerClassName, d2, locale, pattern); 413 414 Date dn1 = parseDate(callerClassName, s1, locale, pattern); 415 Date dn2 = parseDate(callerClassName, s2, locale, pattern); 416 417 return dn1.equals(dn2); 418 } 419 420 428 public static final Date setTime(String callerClassName, Date d, String time, String timeformat) throws ParseException { 429 String s = formatDate(callerClassName, d, REVERSE_DATE_FORMAT) + time; 430 return parseDate(callerClassName, s, REVERSE_DATE_FORMAT + timeformat); 431 } 432 433 } | Popular Tags |