1 14 package org.compiere.util; 15 16 import java.util.*; 17 import java.sql.*; 18 import java.math.*; 19 20 import org.compiere.model.*; 21 22 28 public class TimeUtil 29 { 30 35 static public Timestamp getDay (long time) 36 { 37 if (time == 0) 38 return null; 39 GregorianCalendar cal = new GregorianCalendar(Language.getLanguage().getLocale()); 40 cal.setTimeInMillis(time); 41 cal.set(Calendar.HOUR_OF_DAY, 0); 42 cal.set(Calendar.MINUTE, 0); 43 cal.set(Calendar.SECOND, 0); 44 cal.set(Calendar.MILLISECOND, 0); 45 return new Timestamp (cal.getTimeInMillis()); 46 } 48 53 static public Timestamp getDay (Timestamp dayTime) 54 { 55 if (dayTime == null) 56 return null; 57 return getDay(dayTime.getTime()); 58 } 60 67 static public Timestamp getDay (int day, int month, int year) 68 { 69 GregorianCalendar cal = new GregorianCalendar (year, month, day); 70 return new Timestamp (cal.getTimeInMillis()); 71 } 73 78 static public Timestamp getNextDay (Timestamp day) 79 { 80 if (day == null) 81 return null; 82 GregorianCalendar cal = new GregorianCalendar(Language.getLanguage().getLocale()); 83 cal.setTimeInMillis(day.getTime()); 84 cal.add(Calendar.DAY_OF_YEAR, +1); cal.set(Calendar.HOUR_OF_DAY, 0); 86 cal.set(Calendar.MINUTE, 0); 87 cal.set(Calendar.SECOND, 0); 88 cal.set(Calendar.MILLISECOND, 0); 89 return new Timestamp (cal.getTimeInMillis()); 90 } 92 98 static public Timestamp getDayTime (Timestamp day, Timestamp time) 99 { 100 GregorianCalendar cal_1 = new GregorianCalendar(); 101 cal_1.setTimeInMillis(day.getTime()); 102 GregorianCalendar cal_2 = new GregorianCalendar(); 103 cal_2.setTimeInMillis(time.getTime()); 104 GregorianCalendar cal = new GregorianCalendar(Language.getLanguage().getLocale()); 106 cal.set(cal_1.get(Calendar.YEAR), 107 cal_1.get(Calendar.MONTH), 108 cal_1.get(Calendar.DAY_OF_MONTH), 109 cal_2.get(Calendar.HOUR_OF_DAY), 110 cal_2.get(Calendar.MINUTE), 111 cal_2.get(Calendar.SECOND)); 112 cal.set(Calendar.MILLISECOND, 0); 113 Timestamp retValue = new Timestamp(cal.getTimeInMillis()); 114 return retValue; 116 } 118 131 static public boolean inRange (Timestamp start_1, Timestamp end_1, Timestamp start_2, Timestamp end_2) 132 { 133 if (end_1.before(start_1)) 135 throw new UnsupportedOperationException ("TimeUtil.inRange End_1=" + end_1 + " before Start_1=" + start_1); 136 if (end_2.before(start_2)) 137 throw new UnsupportedOperationException ("TimeUtil.inRange End_2=" + end_2 + " before Start_2=" + start_2); 138 if (!end_2.after(start_1)) { 141 return false; 143 } 144 if (!start_2.before(end_1)) { 147 return false; 149 } 150 return true; 152 } 154 167 static public boolean inRange (Timestamp start, Timestamp end, 168 boolean OnMonday, boolean OnTuesday, boolean OnWednesday, 169 boolean OnThursday, boolean OnFriday, boolean OnSaturday, boolean OnSunday) 170 { 171 if (OnSaturday && OnSunday && OnMonday && OnTuesday && OnWednesday && OnThursday && OnFriday) 173 return false; 174 175 GregorianCalendar calStart = new GregorianCalendar(); 176 calStart.setTimeInMillis(start.getTime()); 177 int dayStart = calStart.get(Calendar.DAY_OF_WEEK); 178 GregorianCalendar calEnd = new GregorianCalendar(); 180 calEnd.setTimeInMillis(end.getTime()); 181 calEnd.add(Calendar.DAY_OF_YEAR, -1); int dayEnd = calEnd.get(Calendar.DAY_OF_WEEK); 183 184 if (calStart.get(Calendar.YEAR) == calEnd.get(Calendar.YEAR) 186 && calStart.get(Calendar.MONTH) == calEnd.get(Calendar.MONTH) 187 && calStart.get(Calendar.DAY_OF_MONTH) == calEnd.get(Calendar.DAY_OF_YEAR)) 188 { 189 if ((!OnSaturday && dayStart == Calendar.SATURDAY) 190 || (!OnSunday && dayStart == Calendar.SUNDAY) 191 || (!OnMonday && dayStart == Calendar.MONDAY) 192 || (!OnTuesday && dayStart == Calendar.TUESDAY) 193 || (!OnWednesday && dayStart == Calendar.WEDNESDAY) 194 || (!OnThursday && dayStart == Calendar.THURSDAY) 195 || (!OnFriday && dayStart == Calendar.FRIDAY)) 196 { 197 return true; 200 } 201 return false; 204 } 205 208 BitSet days = new BitSet (8); 210 if (dayEnd <= dayStart) 212 dayEnd += 7; 213 for (int i = dayStart; i < dayEnd; i++) 214 { 215 int index = i; 216 if (index > 7) 217 index -= 7; 218 days.set(index); 219 } 221 222 225 if ((!OnSaturday && days.get(Calendar.SATURDAY)) 227 || (!OnSunday && days.get(Calendar.SUNDAY)) 228 || (!OnMonday && days.get(Calendar.MONDAY)) 229 || (!OnTuesday && days.get(Calendar.TUESDAY)) 230 || (!OnWednesday && days.get(Calendar.WEDNESDAY)) 231 || (!OnThursday && days.get(Calendar.THURSDAY)) 232 || (!OnFriday && days.get(Calendar.FRIDAY))) 233 { 234 return true; 237 } 238 239 return false; 242 } 244 245 251 static public boolean isSameDay (Timestamp one, Timestamp two) 252 { 253 GregorianCalendar calOne = new GregorianCalendar(); 254 calOne.setTimeInMillis(one.getTime()); 255 GregorianCalendar calTwo = new GregorianCalendar(); 256 calTwo.setTimeInMillis(two.getTime()); 257 if (calOne.get(Calendar.YEAR) == calTwo.get(Calendar.YEAR) 258 && calOne.get(Calendar.MONTH) == calTwo.get(Calendar.MONTH) 259 && calOne.get(Calendar.DAY_OF_MONTH) == calTwo.get(Calendar.DAY_OF_YEAR)) 260 return true; 261 return false; 262 } 264 270 static public boolean isAllDay (Timestamp start, Timestamp end) 271 { 272 GregorianCalendar calStart = new GregorianCalendar(); 273 calStart.setTimeInMillis(start.getTime()); 274 GregorianCalendar calEnd = new GregorianCalendar(); 275 calEnd.setTimeInMillis(end.getTime()); 276 if (calStart.get(Calendar.HOUR_OF_DAY) == calEnd.get(Calendar.HOUR_OF_DAY) 277 && calStart.get(Calendar.MINUTE) == calEnd.get(Calendar.MINUTE) 278 && calStart.get(Calendar.SECOND) == calEnd.get(Calendar.SECOND) 279 && calStart.get(Calendar.MILLISECOND) == calEnd.get(Calendar.MILLISECOND) 280 && calStart.get(Calendar.HOUR_OF_DAY) == 0 281 && calStart.get(Calendar.MINUTE) == 0 282 && calStart.get(Calendar.SECOND) == 0 283 && calStart.get(Calendar.MILLISECOND) == 0 284 && start.before(end)) 285 return true; 286 return false; 288 } 290 296 static public int getDaysBetween (Timestamp start, Timestamp end) 297 { 298 boolean negative = false; 299 if (end.before(start)) 300 { 301 negative = true; 302 Timestamp temp = start; 303 start = end; 304 end = temp; 305 } 306 GregorianCalendar cal = new GregorianCalendar(); 308 cal.setTime(start); 309 cal.set(Calendar.HOUR_OF_DAY, 0); 310 cal.set(Calendar.MINUTE, 0); 311 cal.set(Calendar.SECOND, 0); 312 cal.set(Calendar.MILLISECOND, 0); 313 GregorianCalendar calEnd = new GregorianCalendar(); 314 calEnd.setTime(end); 315 calEnd.set(Calendar.HOUR_OF_DAY, 0); 316 calEnd.set(Calendar.MINUTE, 0); 317 calEnd.set(Calendar.SECOND, 0); 318 calEnd.set(Calendar.MILLISECOND, 0); 319 320 322 if (cal.get(Calendar.YEAR) == calEnd.get(Calendar.YEAR)) 324 { 325 if (negative) 326 return (calEnd.get(Calendar.DAY_OF_YEAR) - cal.get(Calendar.DAY_OF_YEAR)) * -1; 327 return calEnd.get(Calendar.DAY_OF_YEAR) - cal.get(Calendar.DAY_OF_YEAR); 328 } 329 330 int counter = 0; 332 while (calEnd.after(cal)) 333 { 334 cal.add (Calendar.DAY_OF_YEAR, 1); 335 counter++; 336 } 337 if (negative) 338 return counter * -1; 339 return counter; 340 } 342 348 static public Timestamp addDays (Timestamp day, int offset) 349 { 350 if (day == null) 351 return null; 352 GregorianCalendar cal = new GregorianCalendar(); 354 cal.setTime(day); 355 cal.set(Calendar.HOUR_OF_DAY, 0); 356 cal.set(Calendar.MINUTE, 0); 357 cal.set(Calendar.SECOND, 0); 358 cal.set(Calendar.MILLISECOND, 0); 359 if (offset == 0) 360 return new Timestamp (cal.getTimeInMillis()); 361 cal.add(Calendar.DAY_OF_YEAR, offset); return new Timestamp (cal.getTimeInMillis()); 363 } 365 371 static public Timestamp addMinutess (Timestamp dateTime, int offset) 372 { 373 if (dateTime == null) 374 return null; 375 if (offset == 0) 376 return dateTime; 377 GregorianCalendar cal = new GregorianCalendar(); 379 cal.setTime(dateTime); 380 cal.add(Calendar.MINUTE, offset); return new Timestamp (cal.getTimeInMillis()); 382 } 384 385 386 392 public static String formatElapsed (Timestamp start, Timestamp end) 393 { 394 if (start == null) 395 return "NoStartTime"; 396 if (end == null) 397 return "NoEndTime"; 398 long startTime = start.getTime(); 399 long endTime = end.getTime(); 400 return formatElapsed(endTime-startTime); 401 } 403 408 public static String formatElapsed (long elapsed) 409 { 410 long miliSeconds = elapsed%1000; 411 elapsed = elapsed / 1000; 412 long seconds = elapsed%60; 413 elapsed = elapsed / 60; 414 long minutes = elapsed%60; 415 elapsed = elapsed / 60; 416 long hours = elapsed%24; 417 long days = elapsed / 24; 418 StringBuffer sb = new StringBuffer (); 420 if (days != 0) 421 sb.append(days).append("'"); 422 if (hours != 0) 423 sb.append(get2digits(hours)).append(":"); 424 if (minutes != 0) 425 sb.append(get2digits(minutes)).append(":"); 426 sb.append(get2digits(seconds)).append(".").append(miliSeconds); 427 return sb.toString(); 428 } 430 435 private static String get2digits (long no) 436 { 437 String s = String.valueOf(no); 438 if (s.length() > 1) 439 return s; 440 return "0" + s; 441 } 443 } | Popular Tags |